宏__cplusplus

宏__cplusplus有2个作用:
1)用于C/C++混合代码;
2)用于判断C++版本;

C, C++混合代码

编写C/C++混合代码时,头文件常会有如下声明:

#ifdef __cplusplus
extern "C" {
#endif

// C代码

#ifdef __cplusplus
}
#endif

这种头文件可以被#include到C文件(.c)中进行编译,也可以被#include到C++文件(.cpp/.cxx/.cc等)中进行编译。因为extern "C"可以抑制C++对函数名、变量名等符号(symbol)进行名称重整(name mangling),因此,编译出的C目标文件和C++目标文件中的变量、函数名称等符号相同,而没有重整。这样,链接器可以可靠地对两种类型的目标文件进行链接。

C++标准版本

除了编写C/C++混合代码时用到,__cplusplus也常用于判断编译器支持的C++标准,如C++03标准中,__cplusplus值被预定义为199711L,C++11标准中,__cplusplus被预定义为201103L。

例如,程序员如果想要确定代码使用支持C++11编译器进行编译时,可这样检测:

#if __cplusplus < 201103L
    #error "should use C++11 implmentation"
#endif

当不支持代码编译C++11时,会立即报错并终止编译。

posted @ 2022-03-28 09:45  明明1109  阅读(2010)  评论(0编辑  收藏  举报