GCC选项强制执行Ansi C标准检查?
我应该使用哪些gcc选项来强制执行ANSI 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
应该做你想要的。