extern
- 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”
- 注意 extern 声明的位置对其作⽤域也有关系,如果是在 main 函数中进⾏声明的,则只能在 main 函数中调⽤,在其它函数中不能调⽤。其实要调用其他文件中的函数或者变量,只需要把该文件用#include包含进来即可,那为什么还需要用extern呢?因为extern可以加速程序的编译过程,这样能够节省时间
- 在C++中extern还有另外一种作用,用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern "C"声明要引用的函数,这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成之后在目标代码中命名规范不同,用此来解决名字匹配的问题
关于extern “C“
extern "C"的主要作用就是为了能够让C++代码调用其他C语言代码。加上extern "C"之后,会指示编译器这部分代码按照C语言(而不是C++)的方式进行编译。
- 由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;
- 而C语言不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名
这个功能十分有用处,因为在C++出现前,很多代码都是C语言编写的,而且很底层的库也是C语言编写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略