【发布时间】:2012-04-05 13:22:46
【问题描述】:
例如,哪个gcc版本支持c99?
是否有任何表格或图表显示 gcc 和 g++ 的标准支持状态?
gcc 和 g++ 是如何演变的?
谢谢~
【问题讨论】:
-
最近有一个问题与你的问题here的c++部分有关
-
此页面可能会总结您的需求。 gcc.gnu.org/projects/cxx-status.html
例如,哪个gcc版本支持c99?
是否有任何表格或图表显示 gcc 和 g++ 的标准支持状态?
gcc 和 g++ 是如何演变的?
谢谢~
【问题讨论】:
非常严格地说,GCC 从 4.3 开始只支持 C89、C++98 和 C++03。
到目前为止,对 C99 的支持仍然不完整,但 GCC 长期以来一直支持一个非常大且可用的子集。
实验性的 C++11 支持从 4.3 开始,并且一直在改进;它在 4.6.x 中已经非常有用了,并且在 4.7 中添加了更多功能(虽然 4.7.0 有点不稳定)。
还有一些 C11 支持,但 C11 的许多更改都需要适当的新 C 库,而该库不易替换。
【讨论】:
目前最新版本为 4.7,您将获得最广泛的标准支持。可以使用-std 开关设置所选标准。 Here is an article that describes the available values。还可以使用-fpermissive 启用一些额外的功能/不同的行为。
【讨论】:
-std 的可能值几乎相同。它认为最新添加的是 4.3 中的“c++0x”。标准及其在 GCC 中的实施是两件不同的事情。什么叫“支持”?即使是最新版本,GCC 仍然添加了对 C++03 的修复,并且该标准已经有将近 10 年的历史了(有点迂腐,大部分都与 c++98 相同,所以它甚至更老了)。
-fpermissive 允许编译非标准代码。在某些情况下,代码不是标准的,但编译器仍然可以理解其含义。通常此类代码会被拒绝,但您可以使用此选项获得更宽松的规则。正常的用例是当您需要保持与遗留代码的兼容性时。例如,两阶段查找更改(实际上是修复)可以破坏现有代码,但-fpermissive 将应用之前的规则。
我想这张表也很有用: cppreference compiler support page
【讨论】:
支持细节可以在 gnu 网站上找到。我记得大约有几十个标准 gcc 不适用于 c99。 无论如何,在 gcc 中支持 c99 只需要简单的 --std=c99 参数
【讨论】: