我尝试使用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则支持)。
答案 0 :(得分:2)
__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
)即可禁止显示这些警告。