2011-10-31 74 views
4

Visual C++功能#pragma warning其中包括允許更改特定警告的警告級別。說默認警告X有4級,然後在爲什麼要在C++中更改特定警告的警告級別?

#pragma warning(3, X) 

從這一點開始它將具有等級3。

我明白爲什麼我會暫時禁用警告,把警告變成了錯誤或打開一個華林,默認情況下是關閉的。但是,爲什麼我要更改警告級別?

我的意思是警告級別的特定警告與編譯器「警告級別」選項/W一起工作,所以我目前無法想象一個設置,在該設置中,我想更改個別警告的級別,因爲警告正在發射與否取決於項目設置。

是什麼,當我真的需要改變C++中的特定警告的警告級別現實生活中的例子?

回答

4

當你想在3級或4上運行,但要看到/沒有看到具體的信息,你可以改變它的水平。當然,如果警告水平不是你想象的,那麼編譯指示可能沒有效果,但這是編譯指示的生活。

-2

我的經驗是處理警告和錯誤,努力生成沒有警告的代碼。我知道這可能看起來像一個愚蠢或過於嚴格的方法,但從長遠來看,它確實確實帶來了回報。相信我!

+1

這是如何解釋需要改變警告的級別? –

+1

這根本不回答問題。 –

+0

它回答最後一段,帶有問號的那一段。 – e8johan

4

這是很容易採取的一個或兩個級別您要檢測4警告和使用編譯把他們分爲3個級別比它是使用/W4和禁用(/Wd####)的所有警告你不在乎關於。

1

在某些情況下,當你與遺留代碼,並且由於較新的編譯器工作成爲可能要調低警戒線這些模塊以避免成千上萬的警告更加敏感。另外在某些情況下,當您與生成的代碼進行交互時,您希望關閉警告級別。例如ANTLR生成的C代碼視爲黑盒子,因此您不需要警告。

1

的,我用這個是錯誤C4996,我從一個3級警告級別4例如移動它的一個例子,在VS編譯器警告的sprintf 可能是不安全的,建議您使用非可移植的sprintf_s函數。你可以得到很多這些警告,而不是通過所有這些發現真正的錯誤,我寧願阻止它們被髮布。

我知道我可以定義一個用於sprintf(和其他函數的加載)的宏,它將保持可移植性,嚴格地說應該這樣做,但在大型項目中,追蹤並修復所有這些警告是一些努力,可能很少有回報。