宏_cplusplus在C++11中的使用

_cplusplus宏经常出现在C与C++混合编写的代码中, 一般放在头文件中,比如

#ifdef __cplusplus
extern "C" {
#endif

//some code ...

#ifdef __cplusplus
}
#endif

由于extern "C" 可以抑制C++对函数名、变量名进行名称重整,因些编译出的C目标文件和C++目标文件中的函数名、变量名都是相同的,链接器可以可靠地对两种类型的目标文件进行链接。这种类型的头文件可以被#include到C文件中进行编译,也可以被#include到C++文件中进行编译。 因此这种做法成为了C与C++混用头文件的典型做法。

然而,你不知道的可能是__cplusplus是被定义为某个值的,在C++11之前或许跟本不用关心它。但是在C++11中可以用它来提早暴露编译问题。

//C++03: __cplusplus = 199711L
//C++11: __cplusplus = 201103L

#if __cplusplus < 201103L
    #error "Should use --std=c++11 option for compile."
#endif

如代码所示,不同C++标准中__cplusplus值是不同的。如果代码中使用了C++11的特性,这里可以做检查。如果使用的不是C++11编译器,那么可以使用#error预处理指令报出问题所在。编译输出如下所示,非常清楚的指出错误所在。

horen:~/cplusplus/cplusplus$ g++ -g cplusplus.cpp -o cplusplus;
In file included from cplusplus.cpp:3:0:
cplusplus.h:8:6: error: #error "Should use --std=c++11 option for compile."
     #error "Should use --std=c++11 option for compile."

 

转载于:https://my.oschina.net/renhc/blog/748094

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值