VC6使用#pragma warning的一點經驗 (轉)

gugu99發表於2007-08-15
VC6使用#pragma warning的一點經驗 (轉)[@more@]

1.  在VC6.0中定義類CError的頭中起始處有如下#include語句

#include

#include

microsoft-com::office" />

class CXMLError 

{

  …

在使用Level 4編譯時,報告C4100,C4511,C4512,C4663,C4245,C4018幾種Warning

2.  修改為如下:

#pragma warning( push )

#pragma warning( disable :  4100 4511 4512 4663 4245 4018)

#include

#include

#pragma warning( pop )

這時產生了大量C4514警告。

3.  再修改為

#pragma warning( push )

#pragma warning( disable :  4100 4511 4512 4663 4245 4018 4514)

#include

#include

#pragma warning( pop )

結果依然如上,有大量C4514警告,少量4663,4245,4108。

4.  再修改如下:

#pragma warning( disable :  4100 4511 4512 4663 4245 4018 4514)

#pragma warning( push )

#include

#include

#pragma warning( pop )

結果只餘下4663, 4245, 4108

由於不能去除4663, 4245, 4108三種警告

5.  又對包含標頭檔案修改為在Level 3編譯,如下:

#pragma warning( disable:4514)

#pragma warning( push,3 )

#include

#include

#pragma warning( pop)

結果無警告產生。

6.  又嘗試如下修改:

#include

#pragma warning( push,3 )

#include

#pragma warning( pop)

結果無警告產生。

小結:

1.  在防止包含標頭檔案引起的Warning而使用#pragma warning時,應只針對產生警告的標頭檔案進行處理,在這個問題中是,這時應該在#include 上面加#pragma warning(push),否則可能增加其它警告,如此處產生的大量C4514

2.  在使用#pragma warning(push)後使用#pragma warning(disable: xxxx)可能無效時,可以嘗試兩個語句的順序,這可能是VC6.0中的#pragma warning的。

3. 在VC6.0中存在一些不能diable掉的Warning,如4663, 4245, 4108等。這可能是VC6.0的Bug,如已知的C4786在VC6.0中不能disable掉,使用#pragma warning(disable : 4786)之後仍然會顯示警告。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-958824/,如需轉載,請註明出處,否則將追究法律責任。

相關文章