【问题标题】:Which gcc and g++ version support which standard of c and c++?哪个 gcc 和 g++ 版本支持 c 和 c++ 的哪个标准?
【发布时间】:2012-04-05 13:22:46
【问题描述】:

例如,哪个gcc版本支持c99?

是否有任何表格或图表显示 gcc 和 g++ 的标准支持状态?

gcc 和 g++ 是如何演变的?

谢谢~

【问题讨论】:

标签: c++ c gcc g++ standards


【解决方案1】:

非常严格地说,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 库,而该库不易替换。

【讨论】:

    【解决方案2】:

    目前最新版本为 4.7,您将获得最广泛的标准支持。可以使用-std 开关设置所选标准。 Here is an article that describes the available values。还可以使用-fpermissive 启用一些额外的功能/不同的行为。

    【讨论】:

    • 我可以看到您提供的网页中支持许多标准的 gcc 和 g++。关于哪个 gcc 和 g++ 版本支持哪些标准的信息在哪里?谢谢~
    • 我不认为有这样的信息可用,如果有的话,-std 的可能值几乎相同。它认为最新添加的是 4.3 中的“c++0x”。标准及其在 GCC 中的实施是两件不同的事情。什么叫“支持”?即使是最新版本,GCC 仍然添加了对 C++03 的修复,并且该标准已经有将近 10 年的历史了(有点迂腐,大部分都与 c++98 相同,所以它甚至更老了)。
    • 谢谢~我能理解其中的区别。而使用-fpermissive又是什么情况?
    • -fpermissive 允许编译非标准代码。在某些情况下,代码不是标准的,但编译器仍然可以理解其含义。通常此类代码会被拒绝,但您可以使用此选项获得更宽松的规则。正常的用例是当您需要保持与遗留代码的兼容性时。例如,两阶段查找更改(实际上是修复)可以破坏现有代码,但-fpermissive 将应用之前的规则。
    【解决方案3】:
    【解决方案4】:

    我想这张表也很有用: cppreference compiler support page

    【讨论】:

      【解决方案5】:

      支持细节可以在 gnu 网站上找到。我记得大约有几十个标准 gcc 不适用于 c99。 无论如何,在 gcc 中支持 c99 只需要简单的 --std=c99 参数

      【讨论】:

        猜你喜欢
        • 2018-04-27
        • 2020-12-17
        • 2017-06-11
        • 1970-01-01
        • 2020-01-17
        • 2011-06-14
        • 2017-07-01
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多