1.extern用来声明或者引用一个全局变量。
比如两个文件中同时定义了int a
若两个文件一起链接时就会报错,表示重复定义了,也就是说各个文件的全局变量名不可相同。
那么如果在文件a中定义了一个全局变量,在b中直接使用该变量:
//A.cpp
Int I;
//B.cpp
Int main()
{
I = 1;//企图使用A中定义的全局变量
}
这样也会报错,因为在编译阶段,可见性仍局限于各自的文件。
因此利用extern提示编译器:你现在编译的文件中(B.cpp),有一个变量i虽然没有在本文件定义,但在其他文件中定义的全局变量。
//A.cpp
Int I;
//B.cpp
Extern int I; //利用extern表明这个i是一个其他文件中的全局变量
Int main(){
I = 1;//企图使用A中定义的全局变量
}
2.extern "c"
在c++环境中调用c的函数,常常会出现编译器无法找到该函数定义的错误,这是因为c++为了支持多态,比如重载和模板,c++编译时生成函数名非常复杂,而c语言不会,因此会造成找不到c函数的情况。此时C函数需要利用extern "c"进行链接指定,告诉编译器,不要改变我的名字。