我应该使用哪些gcc选项来强制执行ANSI C(C99)警告/错误? gcc(GCC)3.4.2(mingw-special)
我正在使用: gcc -pedantic -ansi -std = c99 这是对的吗?
答案 0 :(得分:21)
-ansi
标志与-std=c89
标志同义。
只需将-std=c99
与-pedantic
一起使用即可。
如有疑问,您可以随时refer to the GCC documentation。从GCC 3.4.2开始,要阅读的章节是2 - Language Standards Supported by GCC。
答案 1 :(得分:8)
这是一个老问题,但我只是想补充一些额外的分数。
首先,无论您提供给GCC的通用命令行开关集,目前似乎无法使GCC将所有约束违规报告为“错误”和所有内容否则作为“警告”。从C语言的角度来看,GCC报告的一些诊断消息“警告”实际上是约束违规(即“错误”),但是没有办法强迫GCC识别这个事实和生成“错误”诊断。很可能通过微调单个警告类型可以实现更精确的分离,但我不确定GCC设置是否提供足够的粒度来实现良好匹配。
其次,GCC提供-pedantic-errors
选项,可用于代替普通-pedantic
,旨在使诊断消息的分类更准确(如上所述)分为“错误”和“警告”。但它仍然不完美。
P.S。语言规范不要求/定义将诊断消息分离为“错误”和“警告”,但实际上许多程序员期望约束违规被报告为“错误”。我认为当你在问题中提到“强制执行警告/错误”时,你可能会有类似的意思。
答案 2 :(得分:3)
-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
可以做您想做的事。