gcc __STDC_版本__未在C++11中定义?

ntjbwcob  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(330)

我尝试用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
我必须包括一些头文件,或添加编译器标志?

qco9c6ql

qco9c6ql1#

official documentation声明:
__STDC_VERSION__
...
如果使用-traditional-cpp选项,则不会定义此宏,编译C或Objective-C时也是如此。
另外,C
标准让实现来决定是否定义这个宏,g ++选择了后者。
根据您要做的事情,__cplusplus宏可能是一种替代方法(它不仅仅是定义的,它也有一个值;)

1tu0hz3e

1tu0hz3e2#

对于遇到以下警告的人:

warning: "__STDC_VERSION__" is not defined

这是由于启用了-Wundef标志:
-Wundef
如果在#if指令中计算未定义的标识符,则发出警告。此类标识符将替换为零。
(from GCC官方文件)
因此,只需将__STDC_VERSION__定义为零(-D__STDC_VERSION__=0)就可以抑制这些警告。

相关问题