一、extern”C”

​ 百度百科讲得很清楚 ,就是说,c++编译器虽然支持c,但是由于函数重载的存在,编译的时候会把参数也加到编译中,而c却不支持。所以使用该符号,表明使用c的方式去编译这些文件。

extern “C”的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

二、extern

​ extern是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。我觉得它是个导出声明符号,达到代码段共享的作用。

​ 当时我有点不明白,它和static静态全局有什么区别?extern是真全局变量,可以在多个地方进行extern int a这样的声明,仅仅是声明,只可以在一个地方进行定义。只要声明了之后,就可以共享这个变量a。而static为只申请一次,然后一直存在,作用域内的地方可以一直使用它,而且值也不变,不会跟函数结束而被释放。同名会被作用域小的替代。

三、_cplusplus

​ 它是个宏定义,表明当前是c++环境。结合使用,效果更佳

1
2
3
4
5
6
7
8
> #ifdef __cplusplus /* 如果采用了C++,如下代码使用C编译器 */
> extern "C"{/* 如果没有采用C++,顺序预编译 */
> #endif
> /* 采用C编译器编译的C语言代码段 */
> #ifdef __cplusplus /* 结束使用C编译器 */
> }
> #endif
>