默认情况下C标准禁止警告

时间:2016-04-16 13:35:10

标签: c language-lawyer

-Wall编译的提问者让我思考的情况下,看到另一个question答案显而易见。

是否有基于'C标准'的原因导致编译器默认无法启用-Wall

据我所知,没有一个主要的编译器这样做(当然在历史上没有人这样做),我想知道这是否符合标准或其他一些原因(惯性,背面兼容性)管他呢)。推测其他原因可能是偏离主题(基于意见),但我认为询问标准是否需要这种行为是关于主题的(事实)。

3 个答案:

答案 0 :(得分:5)

引自N1570附件I:

  

1实现可能会在许多情况下生成警告,而不是   这些是本国际标准的一部分。

这意味着警告对编译器来说是非强制性的,所以我认为没有任何“C标准”的原因。

答案 1 :(得分:4)

  

是否有基于'C标准'的原因导致编译器默认无法启用-Wall

我认为答案就是没有基于标准的理由。编译器开关的行为超出了语言标准的范围。

除此之外,编译器(一般来说)不需要为未指定编译错误的事物生成诊断,因此要求“默认情况下”输出此类诊断是没有意义的。

需要明确的是,这些一般性陈述适用于C语言。

答案 2 :(得分:0)

除了上面提到的原因,该标准没有关于警告的规格,使得Wall默认会对许多人来说更加困难,因为有警告说你实际上并不想时间打开,例如对未使用的变量/功能等的警告 如果您想要#34;默认情况下#34;,您可以为您选择的编译器添加别名,以gcc为例,在bashrc中添加以下内容:

alias gcc="gcc -Wall"