经常在头文件包含代码里面看到如下代码
#ifndef MAC_API_H #define MAC_API_H #ifdef __cplusplus extern “C”{ #endif ……………………… #ifdef __cplusplus }; #endif #endif /*MAC_API_H*/
解释:C/C++编译器对函数和变量名的命名方法不一样,例如C++中重载的函数有多个名字,而C的函数只有一个名字。这样,当C编译器去引用C++编译器编译出来的符号时,会找不到链接。C++中定义了__cplusplus,而C语言没有该定义。通过这个区别,可以识别代码是C还是C++。
当一个头文件可能既被C程序引用,又被C++程序引用时,需要使用如上代码进行区分。为了在C++代码中调用用C写成的库函数,当C++编译的应用程序需要调用C编写的函数库,两者编译器对重载函数的处理不同,造成C++链接器无法找到C库定义的函数。因此,需要用extern “C”来告诉C++编译器,该文件是用C语言编写的,请用C的方式来链接它们。
C/C++编译器预定义的五个帮助宏名。
__LINE__ : 代表当前源码中的行号,整数
__FILE__ : 代表当前文件的名字,字符串
__TIME__: 代表源文件编译时间,字符串,格式为HH:MM:SS
__DATE__: 代表源文件编译日期,字符串,格式为m dd yyyy
不同IDE定义了不同的预编译选项,在开发时,注意收集。