14

我应该使用哪些 gcc 选项来强制执行 ANSI C (C99) 警告/错误?gcc (GCC) 3.4.2 (mingw-special)

我正在使用: gcc -pedantic -ansi -std=c99 这是正确的吗?

4

3 回答 3

30

旗帜-ansi-std=c89旗帜同义。

只需使用-std=c99with-pedantic就足够了。

如有疑问,您可以随时参考 GCC 文档。从 GCC 3.4.2 开始,要阅读的章节是2 - Language Standards Supported by GCC

于 2009-11-30T19:46:53.940 回答
8

这是一个老问题,但我只是想补充一些额外的点。

首先,无论您提供给 GCC 的通用命令行开关集如何,目前似乎都不可能让 GCC 将所有违反约束的行为都报告为“错误”,而将其他所有内容都报告为“警告”。从 C 语言的角度来看, GCC 报告为“警告”的一些诊断消息实际上是违反约束(即“错误”),但没有办法强制 GCC 识别该事实并生成“错误”诊断。很可能通过微调各个警告类型可以实现更精确的分离,但我不确定 GCC 设置是否提供足够的粒度来实现良好的匹配。

其次,GCC 提供-pedantic-errors了可以用来代替 plain 的选项,-pedantic旨在将诊断消息更精确地(如上所述)分类为“错误”和“警告”。虽然它仍然不完美。

PS 语言规范不要求/定义将诊断消息分离为“错误”和“警告”,但实际上许多程序员希望将违反约束的情况报告为“错误”。当您在问题中提到“执行警告/错误”时,我认为您可能是这样的意思。

于 2010-01-25T19:06:31.980 回答
4
-ansi
    In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.

ANSI C 与 C99 不同(还)。此外,-Wall可能也很有趣,但只-pedantic应该做你想做的事。

于 2009-11-30T19:45:51.367 回答