extern关键字目前来说主要有两个功能:
- 创建“全局变量”
- 将C++代码按照C的格式进行编译
两者的区别主要是其修饰的内容。
- 在修饰函数的时候,比如在函数前加上extern “C",例如extern ”C" void Fun1(int, int);此时就是要求编译器将此函数按照C的方式去编译(因为C++中涉及到函数重载,因此对于同名的函数,编译器在编译的时候会加上参数的类型之类的,如某些编译器可能会将上面的函数编译为Fun1_int_int,这个取决于编译器本身)。
- 在修饰变量或者是对象的时候,则是表明这是对于一个变量的声明,注意是“声明”而不是定义,一个变量可以多次声明,但是只能定义一次。在此中,extern充当声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用。
其实,本质上来说,这两个性质其实是一个性质:扩充所修饰内容的作用范围。
修饰函数的时候,就是扩充了此函数的作用范围,从C++扩充到了C代码也可以使用。
修饰变量或者是对象的时候,也是扩充了此变量或者是对象的作用范围,从当前文档可用,到其他文件也可用。