GNU C 何时支持C 11,而无需明确要求

When will Gnu C++ support C++11 without explicitly asking for it?

本文关键字:何时 支持 GNU      更新时间:2023-10-16

当前,使用G -4.8.1您必须通过

在C 11模式中编译文件
g++ -std=c++11 -o prog.x prog.cpp

当我可以说

时,是否有计划
g++ -o prog.x prog.cpp

编译prog.cpp

也许prog.cpp

  • #include <regex>
  • thread_local
  • class Widget { int member = 5; }
  • MyType operator"" myt(const char*, sze_t);
  • 等等。

gcc 6.0:https://gcc.gnu.org/gcc-6/changes.html

C 的默认模式现在是-std=gnu++14而不是-std=gnu++98

我认为最接近的答案是从 info gcc命令:

在2011年出版了经过修订的ISO C 标准为ISO/IEC 14882:2011,被称为C 11;在发布之前 通常称为C 0x。C 11包含对 C 语言,其中大多数是在实验中实现的 GCC中的C 11模式。有关C 11功能的信息 在实验C 11模式下可用,请参阅 http://gcc.gnu.org/projects/cxx0x.html。选择此标准 GCC,使用选项'-std = C 11';获取所有诊断 标准要求,您还应指定" - ppedantic"(或 ' - ppedantic-errors'如果您希望它们是错误而不是错误 警告)。

http://gcc.gnu.org/projects/cxx0x.html页面说:

重要:GCC对C 11的支持仍然是实验性的。一些 功能是根据早期建议实现的,没有尝试 更新时将使它们保持向后兼容性 要匹配最终的C 11标准。

libstdc 页面还表明它是不完整的。(我什至不认为regex已经实现。)

史蒂夫·杰索普(Steve Jessop)的回答基本上在上一段中说了同样的话,但引用了他的答案的第一部分:

c 11已经标准了几年,但编译器不是 将其默认模式切换为C 11,直到:

  • 绝对最小值,C 11支持在该编译器及其使用的库中完成。如果编译器,也稳定 作者对可靠性完全有任何关注。
  • 最好是,编译器的主要版本号增加,因为C 11并未完全落后于C 03。
  • 理想情况下,按照众所周知的时间表,以便用户可以为更改做准备。

更新:原始答案在过去28个月中已过时。根据Nobar的回答,GCC 6.1默认情况下用GNU扩展支持C 14。GCC 6.1于2016年4月27日发布。我很惊讶,但很高兴看到新标准如此快速地采用!

至于原始答案的其余部分,我仍然看到值的价值,以使该部分回答如何使某些标志"默认"。所以我把它放在下面。


当我可以说[...]

时,是否有计划

您可以在makefile中定义默认标志,然后您只能说make

我如何在GCC中启用C 11的答案?应该让您入门(或某些Makefile教程)。

似乎在Stackoverflow上经常弹出的另一种建议是添加bash别名alias g++="g++ --std=c++0x",请参见此处。但是,我个人不会这样做,这可能导致令人不愉快的惊喜。C 11发生了破坏的变化。我会创建自己的makefile并简单地键入make


默认情况下,GCC 5.0似乎将具有GNU11(C 11 afaik的方言),并在更改中共享C 11的改进。请参阅https://gcc.gnu.org/gcc-5/changes.html。看来它也将为C 14提供一些支持。

就 @marc-glisse共享的Bugzilla方案而言,更有趣的陈述似乎不在桌子上,请参阅https://gcc.gnu.org/gcc-5/criteria.html详细信息: -

Bugzilla打开的所有回归都已分析,所有回归均已分析 被认为不太可能影响大多数用户,或者决心 对受影响的用户的影响最小。例如,印刷 诊断的错误可能相对常见,但也很少 对用户的影响。

通常,编译器生成不正确代码的回归, 或拒绝编译有效程序,被认为是 足够严重以阻止释放,除非有很大的 缓解因素。-GCC发布标准页

时间表确实给出了一些想法,即何时和是否会发生https://gcc.gnu.org/develop.html#timeline

因此,希望我们应该看到一个新的GCC,到2015年默认为C 11。。