深入理解C++11 2.4 宏__cplusplus

在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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容