不少人都知道,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声明在函数体外吧