2016-04-16 158 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

這並不令人信服。海灣合作委員會有標誌關閉警告,所以你永遠不會「卡住」。默認打開警告會好很多。 –