首页 > 代码库 > extern关键字放到函数体内而导致的linkage问题
extern关键字放到函数体内而导致的linkage问题
不少人都知道,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声明在函数体外吧
extern关键字放到函数体内而导致的linkage问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。