__STDC_VERSION__在C ++ 11中没有定义?

时间:2014-06-29 14:55:18

标签: c++ gcc c++11

我尝试使用gcc 4.8和clang获取__STDC_VERSION__,但它没有定义。 编译器标志:

g++ -std=c++11 -O0 -Wall -Wextra -pedantic -pthread main.cpp && ./a.out

http://coliru.stacked-crooked.com/a/b650c0f2cb87f26d

#include <iostream>
#include <string>

int main()
{
    std::cout << __STDC_VERSION__  << std::endl;
}

结果:

main.cpp:6:18: error: '__STDC_VERSION__' was not declared in this scope

我必须包含一些标头,或添加编译器标志?


P.S。有人知道编译器预定义的宏,检查通用lambda存在吗?例如,gcc 4.8可以在-std=c++1y模式下工作,但仍然不支持通用lambdas(而gcc 4.9则支持)。

2 个答案:

答案 0 :(得分:2)

official documentation州:

  

__STDC_VERSION__

     

...

     

如果使用-traditional-cpp选项,则未定义此宏,也不会在编译C ++或Objective-C时定义。

此外,C ++标准还是由实现来定义这个宏,而g ++选择了后者。

根据您要执行的操作,__cplusplus宏可能是另一种选择(它不仅仅是定义的,它也有值;)

答案 1 :(得分:0)

对于那些遇到以下警告的人:

warning: "__STDC_VERSION__" is not defined

这归因于启用了Wundef标志:

-Wundef

警告是否在#if指令中评估未定义的标识符。此类标识符将替换为零。

(来自official GCC documentation

因此,您只需将__STDC_VERSION__定义为零(-D__STDC_VERSION__=0)即可禁止显示这些警告。