【问题标题】:g++ standards supportg++ 标准支持
【发布时间】:2010-08-29 17:15:54
【问题描述】:

读到这里我有点疑惑:Gcc 4.5 online manual --- Standards section.

他们解释了这一点

最初的 ISO C++ 标准作为 ISO 标准 (ISO/IEC 14882:1998) 发布,并由 2003 年发布的技术勘误表 (ISO/IEC 14882:2003) 进行了修订。这些标准分别称为 C++98 和 C++03。 GCC 实现了 C++98 的大部分内容(导出是一个明显的例外)和 C++03 中的大部分更改。

但他们不知道 gcc 是支持“裸”98 C++ 还是仅支持更正后的 C++03。在“C语言”部分,解释更清楚:

在 2001、2004 和 2007 年发布的三份技术勘误中更正了 1999 ISO C 标准中的错误。GCC 不支持未更正的版本。

所以我的问题是:g++ 也是这样吗(不支持未更正的标准)?

选择 g++ 标准的唯一 4 个选项是 -std=c++98-std=gnu++98-std=c++0x-std=gnu++0x。对吗?

最后一个子问题:那么-ansi 选项是什么?是不是只用在C模式下?

编辑:

-ansi -std=c89(用于 C)或 -std=c++98 的同义词

【问题讨论】:

  • 为什么要支持未更正的标准?
  • 这是一个检查我是否正确理解C++98、C++03等与gcc doc之间的关系的问题;不是“我想”。
  • 请注意,C++03 标准文本和 C++98 文本之间的很大一部分差异是对歧义的澄清等 - 当编译器尝试实现 C++98 时发现的变化.在那里,GCC 无法合理地支持 C++98。

标签: c++ gcc g++ standards


【解决方案1】:

gcc 不支持未更正的标准,它的目标是(尽管没有达到 100%)C++03 一致性。从技术上讲,目前只有一个 C++ 标准,包括 TC1 在内的版本就是它。正如它所说的“支持 C++03 中的大部分更改。要选择此标准...使用选项之一 -ansi-std=c++98”。

不支持或选项选择过时的未更正的 1998 年版本的标准。

【讨论】:

  • TC1和TR1有什么区别?
  • @Martin:TC1 基本上是 C++98 的错误修复,而 TR1 是关于可能的库扩展的报告。两种完全不同的东西。
【解决方案2】:

至少据我所知,不,没有办法“关闭”对 C++03 新功能(其中任何一个)的支持。

-ansi 被 C 前端识别。要了解有关哪些组件识别哪些开关的更多信息,您可以使用 g++ -v --help(这会产生大量输出,因此您通常希望将其通过管道传送到 less 或按此顺序排列的其他内容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2013-09-01
    • 2019-02-06
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多