博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
externkeyword放到函数体内而导致的linkage问题
阅读量:6876 次
发布时间:2019-06-26

本文共 624 字,大约阅读时间需要 2 分钟。

不少人都知道,C/C++语言编程时,假设要引用在别的C/C++文件里定义的变量或函数,必须extern一下,才干使用

另一些人知道,这个extern事实上能够放在函数体内声明,这么做的理由是不想让其它无关函数訪问extern对象,比如

void setOldClock(){    sysTime = 87654321;}void setClock(){    extern int sysTime;    sysTime = 12345678;}
假设sysTime声明在函数体外,则setOldClock也会改动该变量,这一般是不想看到的。

那么问题来了,假设引用是跨语言的呢?

这里有篇MSDN的,讲得比較具体,但对于函数体内声明的场景没有涉及。

事实上,假设是C++引用C的对象,一定不能在函数体内extern,

void setClock(){    extern "C" int sysTime;    sysTime = 12345678;}

上面的代码gcc编译器会报错:

error: expected unqualified-id before string constant

gcc将“C"看做字符串常量,而不是linkage directive,进而导致后面的

error: 'sysTime' was not declared in this scope

所以,对于C++调C对象的场景,还是把extern声明在函数体外吧

转载地址:http://fvofl.baihongyu.com/

你可能感兴趣的文章
函数式编程初识篇
查看>>
如何解决vim乱码【转载】
查看>>
你如何理解HTML结构的语义化?
查看>>
JQuery Ajax 的简单使用
查看>>
Codeforces Round #287 (Div. 2) ABCDE
查看>>
【转载】读懂IL代码就这么简单(二)
查看>>
09-JS的事件流的概念(重点)
查看>>
有关inline-block
查看>>
文献随笔(九)
查看>>
git相关
查看>>
加入大型的js文件如jQuery文件,Eclipse会报错
查看>>
POJ 2763 (树链剖分+边修改+边查询)
查看>>
全局变量---只创建一次
查看>>
IOS APP上下黑边问题
查看>>
数位dp题集
查看>>
C# 汉字转拼音
查看>>
jquery实现复制的两种方式
查看>>
Django分页(一)
查看>>
Balance Adjustment页面调整无法保存的问题
查看>>
De Moivre–Laplace theorem
查看>>