【发布时间】:2012-09-26 16:56:21
【问题描述】:
我有一个学校作业,应该用符合 C++98 的代码编写。如何强制g++ 只接受遵循此标准的代码? -std=c++98 能解决问题还是我需要添加额外的标志?
【问题讨论】:
我有一个学校作业,应该用符合 C++98 的代码编写。如何强制g++ 只接受遵循此标准的代码? -std=c++98 能解决问题还是我需要添加额外的标志?
【问题讨论】:
每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。
【讨论】:
-pedantic-errors 来确保合规性(只要 gcc 能够)。 -pedantic 仅告知您违规行为。顺便说一句,这仍然不会捕获所有使用特定于实现的假设的代码,但这是关于“兼容代码”的意思的争论。在 C 标准中,格式良好的程序和严格符合的程序之间是有区别的,同样的区别也适用于 C++,但我认为 C++ 标准没有使用“严格符合程序”这个术语。
-pedantic 真的是你能做的最好的(至少在 GCC 下)。
-pedantic-errors 是一个开始,但它不是一个安全网。您还必须仔细编码。您可能会发现,如果您假设 char 有 8 位,那么教授会标记您编写不可移植代码,或者您可能会发现这是允许的,但无论哪种方式,GCC 都不会警告您标准允许 CHAR_BIT大于 8。