GCC选项执行Ansi C标准检查?

时间:2009-11-30 19:41:00

标签: c gcc c99

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

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

3 个答案:

答案 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可以做您想做的事。