Gnu C++ 编译器似乎定义__cplusplus
为1
#include <iostream>
int main() {
std::cout << __cplusplus << std::endl;
}
这1
在标准 c++ 模式下使用 gcc 打印,在 C++0x 模式下使用gcc 4.3.4和 gcc 4.7.0 打印。
C++11 FDIS 在“16.8 Predefined macro names [cpp.predefined]”中说
在编译 C++ 翻译单元时,该名称
__cplusplus
被定义为值 201103L 。(脚注:这个标准的未来版本打算用一个更大的值替换这个宏的值。不符合标准的编译器应该使用最多五个十进制数字的值。)
旧的 std C++03 也有类似的规则。
GCC 是否故意将其设置为1
,因为它是“不合格的”?
通过阅读该列表,我认为__cplusplus
如果我有一个启用 C++11 的编译器,我可以用一种可移植的方式进行检查。但是对于g++,这似乎不起作用。我知道...EXPERIMENTAL...
宏,但很好奇为什么g++__cplusplus
以这种方式定义。
我最初的问题是在不同的空指针变体之间切换。像这样的东西:
#if __cplusplus > 201100L
# define MYNULL nullptr
#else
# define MYNULL NULL
#endif
是否有一种简单且合理便携的方式来实现这种开关?