宏__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时,会立即报错并终止编译。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM