如何找到我的GCC编译器支持的标准?我的意思不是说在编译时如何找出正在使用的C ++标准(检查已定义的常量),但是在编译之前,如何检查可用的标准(用于flag -std=c++??)?
该信息不在中man g++。
g++ --version除了手动尝试选项外,我还可以检出我的gcc版本吗?
是否可以在某处找到GCC版本和支持的标准表?
Jas*_*n C 10
所以,经过一番努力试图磨练我的sed技能后,我能够想出这个命令:
gcc -v --help 2> /dev/null | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'
Run Code Online (Sandbox Code Playgroud)
它处理g++ -v --help(静默它打印到的额外信息stderr)的输出,匹配以开头的行-std=然后捕获值。该^<是阻断-std=<standard>的求助热线。以下是 GCC 9 的一些示例输出:
gcc -v --help 2> /dev/null | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'
Run Code Online (Sandbox Code Playgroud)
您可以grep在中间添加一个以根据帮助描述文本进行过滤,这在帮助输出中方便地保持一致。例如,如果您想删除已弃用的:
gcc -v --help 2> /dev/null | grep -iv deprecated | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'
Run Code Online (Sandbox Code Playgroud)
如果您只想列出未弃用的 C++:
gcc -v --help 2> /dev/null | grep -iv deprecated | grep "C++" | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'
Run Code Online (Sandbox Code Playgroud)
如果您只想列出未弃用的 C:
gcc -v --help 2> /dev/null | grep -iv deprecated | grep "C " | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'
Run Code Online (Sandbox Code Playgroud)
这些都非常老套,并且依赖于grep "C "每个标准名称的帮助描述中出现的“已弃用”、“C++”和/或“C”(注意末尾的空格!),但它们似乎有效。
您可以类似地过滤掉例如“相同”以摆脱同义词等。
小智 7
@oldMammuth 发表的评论几乎是正确的,gcc并且g++确实有办法打印他们支持的语言标准。它只是没有很好的记录。如果它没有列在--help参数帮助文本下方的括号中,我会说它基本上是隐藏的。它的完成方式是通过 GNU 编译器工具链并询问您为它的--help文本使用的特定编译器实例。实际上,我是在为我自己的项目进行这项研究后才了解到这一点的,但是为了将一大堆编译器捆绑在一个程序中,gcc并且g++要做到这一点,他们使用主可执行文件作为与编译器、汇编器和链接器进程通信的中间人。为了访问帮助文本以获取给定编译器版本支持的语言标准,您必须询问编译器,而不是gcc或g++。
由于在这一点上,我已经厌倦了输入这两个命令,其余的将假设我们正在使用gcc; 尽管事实上这两个命令实际上是可以互换的,并且基本上是同一个中间人,但名称不同。
您可以使用gcc -print-prog-name=cc1. 在我的系统上,这是/usr/lib/gcc/x86_64-linux-gnu/8/cc1. 然后,只需使用--help参数调用所述可执行文件,就可以了!请注意,有数百个帮助参数条目。我实际上建议通过管道输出grep并使用正则表达式来查找它们,否则会有太多额外的信息真的很烦人。
或者:
您可以gcc -v --help按照gcc帮助文本中的说明使用,为给定工具链中的每个程序打印帮助对话框。然而,这确实会导致更多的输出。
同样,我的建议是使用正则表达式来搜索输出并找到支持的标准版本。
gcc还支持比 C 和 C++ 更多的语言,包括但不限于 Fortran 和 Go。
gcc 和 g++ 没有命令行选项来检查这一点。如果 -v 选项能够告诉我们所支持的标准,那就太好了。相反,您可以在gcc Standards上查看在线文档,并在cppreference.com上查看有用的概要。
根据cppreference,gcc 4.8.1 完全支持 c++11;
要完全支持 c++14(以及 c++17 的一些新功能),您需要 gcc 5.0 及更高版本。
这是我在网上找到的一个表格
GCC Version C++ Standard
4.9 C++11
5 C++14
6 C++14
7 C++17
8 C++17
9 C++20
10 C++20
11 C++20
12 C++20
13 C++20
Run Code Online (Sandbox Code Playgroud)
请注意,这些是 GCC 版本支持的最低标准。某些版本可能还支持更新的标准。