我应该使用什么gcc选项来强制执行ANSI C(C99)警告/错误? gcc(GCC)3.4.2(mingw-special)
我正在使用: gcc -pedantic -ansi -std=c99 这样做正确吗?
-ansi
标志与 -std=c89
标志同义。
只使用带有 -pedantic
的 -std=c99
应该就足够了。
如果有疑问,您总是可以 参考GCC文档。截至GCC 3.4.2,要阅读的章节是2- GCC支持的语言标准。
-std=c99
和-pedantic
参数:我不明白这与-std=c89
的区别,你是说那些-ansi
错误会显示为警告吗? - VimNing这是一个老问题,但我想要补充一些额外的观点。
首先,无论你为GCC提供哪组通用命令行开关,目前似乎不可能使GCC将所有约束违规报告为“错误”,而将其他所有内容报告为“警告”。 GCC报告为“警告”的一些诊断消息实际上是从C语言的角度来看的约束违规(即“错误”),但没有办法强制GCC认识到这一事实并生成“错误”诊断。也许可以通过微调单个警告类型来实现更精确的分离,但我不确定GCC设置是否提供足够的细粒度来实现良好的匹配。
其次,GCC提供了-pedantic-errors
选项,可用于替换普通的-pedantic
,旨在实现对诊断消息的更精确分类(如上所述)为“错误”和“警告”。然而,它仍然不完美。
P.S. 语言规范不要求/定义将诊断消息分为“错误”和“警告”,但在实践中,许多程序员希望将约束违规报告为“错误”。当您在问题中提到“强制执行警告/错误”时,我认为您可能指的是这样的内容。
-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
才能做到你想要的。
gcc -ansi
仍然指的是那个版本。我建议避免使用“ANSI C”这个模糊不清的术语。改用C89/C90、C99或C11。 - Keith Thompson