编译器标准支持(c 11、c 14、c 17)

新手上路,请多包涵

如何找到我的 GCC 编译器支持的标准?我不是说如何在编译时找出正在使用的 C++ 标准(检查定义的常量),而是在编译之前,如何检查可用的标准以使用(即标志 -std=c++?? ) ?

man g++ 中不存在该信息。

除了手动尝试选项之外,我还可以通过 g++ --version 检查我的 GCC 版本?

是否可以在某处找到 GCC 版本和支持的标准表?

原文由 Šimon Hrabec 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 938
1 个回答

因此,经过一番努力,试图清除我的 sed 技能,我想出了这个命令:

 gcc -v --help 2> /dev/null | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'

它处理 g++ -v --help 的输出(将其打印到 stderr 的额外信息静音),匹配以 -std= 开头的行,然后捕获这些值。 ^< 是屏蔽帮助的 -std=<standard> 行。以下是 GCC 9 的一些示例输出:

 f2003
f2008
f2008ts
f2018
f95
gnu
legacy
c++03
c++0x
c++11
c++14
c++17
c++1y
c++1z
c++2a
c++98
c11
c17
c18
c1x
c2x
c89
c90
c99
c9x
gnu++03
gnu++0x
gnu++11
gnu++14
gnu++17
gnu++1y
gnu++1z
gnu++2a
gnu++98
gnu11
gnu17
gnu18
gnu1x
gnu2x
gnu89
gnu90
gnu99
gnu9x
iso9899:1990
iso9899:199409
iso9899:1999
iso9899:199x
iso9899:2011
iso9899:2017
iso9899:2018

您可以在中间添加一个 grep 根据帮助描述文本进行过滤,这在帮助输出中很方便。例如,如果您想删除已弃用的:

 gcc -v --help 2> /dev/null | grep -iv deprecated | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'

如果您只想列出未弃用的 C++:

 gcc -v --help 2> /dev/null | grep -iv deprecated | grep "C++" | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'

如果您只想列出未弃用的 C:

 gcc -v --help 2> /dev/null | grep -iv deprecated | grep "C " | sed -n '/^ *-std=\([^<][^ ]\+\).*/ {s//\1/p}'

这些非常老套,并且依赖于每个标准名称的帮助描述中出现的“已弃用”、“C++”和/或“C”(注意 grep "C " 末尾的空格),但它们似乎工作。

您可以类似地过滤掉例如“相同”以摆脱同义词等。

原文由 Jason C 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题