2016-04-16 46 views
4

看到又一个question如果问题编号为-Wall,回答会很明显,这让我想到了。C标准默认禁止警告

有没有'C标准'的原因为什么-Wall不能由编译器默认启用?

据我所知,没有主要的编译器这样做(当然,历史上他们都没有这样做),我想知道这是遵守标准还是其他原因(惯性,背部兼容性或其他)。关于其他原因的猜测可能是偏离主题(基于意见),但我想问一个标准是否需要这种行为是在话题上(事实)。

+0

语言标准没有“警告”的规范性概念。 –

+4

根据['gcc'手册](https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Warning-Options.html#Warning-Options),'-Wall'启用“..”所有关于**一些**用户认为有疑问的构造的警告“ - (我的emph。)。 – usr2564301

+0

你真正想要的是'pedantic'和'-std = c11'(或任何你想要的语言)。这会让编译器拒绝实际上不合格的东西。 –

回答

4

有没有'C标准'的原因,为什么-Wall不能由编译器默认启用?

我认为答案是没有标准的原因。编译器开关的行为超出了语言标准的范围。

除此之外,编译器(通常来说)不需要为未指定为编译错误的事件生成诊断,因此要求“默认”输出这样的诊断是无意义的。


而且要清楚的是,这些一般性声明适用于C语言。

5

从N1570附件一报价:

1的实现可能产生在许多情况下的警告,没有 被指定作为该国际标准的一部分。

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

0

除了上面提到的原因,该标准没有关于警告的规范,使Wall缺省对于很多人来说更多是一个障碍,因为存在警告,您实际上不希望打开时常,如对未使用的变量/功能等 警告如果你想“默认”,使之,你可以别名您所选择的编译器,以gcc作为例如,添加以下你的.bashrc:

alias gcc="gcc -Wall" 
+0

这并不令人信服。海湾合作委员会有标志关闭警告,所以你永远不会“卡住”。默认打开警告会好很多。 –