在C与C++混合编写的代码中,经常能在头文件看到类似的声明:
#ifdef __cplusplus
extern "C" {
#endif
//一些代码
#ifdef __cplusplus
}
#endif
这种类型的头文件可以被#include到C文件中进行编译,也可以被#include到C++文件中进行编译。extern "C"可以抑制C++对函数名、变量名等符号的进行名称重整(name mangling),因此编译出的C目标文件和C++目标文件中的变量、函数名称等等号都是相同的,链接器可以可靠地对两种类型的目标文件进行链接。
__cplusplus这个宏通常被定义为一个整型值,而且随着标准变化,这个整数会变大,在C++11中,__cplusplus被预定义为201103L,如果想确定代码是使用支持C++11编译期进行编译,可以用如下代码:
#if __cplusplus < 201103L
#error "should use c++11 implementation"
#endif
网友评论