【问题标题】:Enforcing the C++98 standard in gcc在 gcc 中强制执行 C++98 标准
【发布时间】:2012-09-26 16:56:21
【问题描述】:

我有一个学校作业,应该用符合 C++98 的代码编写。如何强制g++ 只接受遵循此标准的代码? -std=c++98 能解决问题还是我需要添加额外的标志?

【问题讨论】:

    标签: c++ gcc c++98


    【解决方案1】:

    GCC's documentation on standards:

    最初的 ISO C++ 标准作为 ISO 标准 (ISO/IEC 14882:1998) 发布,并由 2003 年发布的技术勘误表 (ISO/IEC 14882:2003) 进行了修订。这些标准分别称为 C++98 和 C++03。 GCC 实现了 C++98 的大部分内容(导出是一个明显的例外)和 C++03 中的大部分更改。要在 GCC 中选择此标准,请使用选项 -ansi、-std=c++98 或 -std=c++03 之一;要获得标准所需的所有诊断,您还应该指定 -pedantic(或 -pedantic-errors,如果您希望它们是错误而不是警告)。

    因此,如果您确实想确保符合标准,则应指定-std=c++98 -pedantic

    【讨论】:

    • +1,但正如它所说,您应该使用-pedantic-errors确保合规性(只要 gcc 能够)。 -pedantic 仅告知您违规行为。顺便说一句,这仍然不会捕获所有使用特定于实现的假设的代码,但这是关于“兼容代码”的意思的争论。在 C 标准中,格式良好的程序和严格符合的程序之间是有区别的,同样的区别也适用于 C++,但我认为 C++ 标准没有使用“严格符合程序”这个术语。
    • @SteveJessop:有什么区别?
    • @KerreK:从记忆中,一个格式良好的程序是一个遵守所有约束的程序,而一个严格符合的程序是一个具有定义行为的程序,并且这种行为在所有符合的实现上都是相同的。教师所说的“符合 C++98”的意思可能是程序格式正确,并且在 GCC 上以迂腐模式定义了行为,也就是说它不一定是可移植的。跨度>
    • 嗯,我怀疑实际上证明一个程序符合该定义是很困难的,因为某些 UB 取决于所涉及变量的确切值(例如 UB 涉及访问无效数组元素)。所以-pedantic 真的是你能做的最好的(至少在 GCC 下)。
    • 提问者的重点是:使用-pedantic-errors 是一个开始,但它不是一个安全网。您还必须仔细编码。您可能会发现,如果您假设 char 有 8 位,那么教授会标记您编写不可移植代码,或者您可能会发现这是允许的,但无论哪种方式,GCC 都不会警告您标准允许 CHAR_BIT大于 8。
    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多