GCC选项强制执行A​​nsi C标准检查?

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

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

-ansi标志与-std=c89标志同义。

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

如有疑问,您可以随时参考GCC文档 。 从GCC 3.4.2开始,要阅读的章节是2 – GCC支持的语言标准 。

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

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

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

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

 -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应该做你想要的。