我尝试用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
我必须包括一些头文件,或添加编译器标志?
2条答案
按热度按时间qco9c6ql1#
official documentation声明:
__STDC_VERSION__
...
如果使用-traditional-cpp选项,则不会定义此宏,编译C或Objective-C时也是如此。
另外,C标准让实现来决定是否定义这个宏,g ++选择了后者。
根据您要做的事情,
__cplusplus
宏可能是一种替代方法(它不仅仅是定义的,它也有一个值;)1tu0hz3e2#
对于遇到以下警告的人:
这是由于启用了
-Wundef
标志:-Wundef
如果在#if指令中计算未定义的标识符,则发出警告。此类标识符将替换为零。
(from GCC官方文件)
因此,只需将
__STDC_VERSION__
定义为零(-D__STDC_VERSION__=0
)就可以抑制这些警告。