2010-03-11 125 views
2

使用Visual Studio .NET 2003 C++和wininet.dll文件 上午看到很多C4995 warnings什麼是Win編譯開關關閉#pragma棄用警告?

More info

任何幫助表示讚賞。

謝謝。

+0

正在使用strsafe.h需要添加的#define STRSAFE_NO_DEPRECATE http://msdn.microsoft.com/en-:如果你需要禁用第三方頭文件一堆警告這可能是得心應手us/library/ms647466%28VS.85%29.aspx – 2010-03-12 01:33:14

回答

6

您可以使用#pragma warning是MSDN頁所示:

#pragma warning(disable: 4995) 

或者,你可以把警告關閉項目的屬性整個項目(右鍵單擊項目 - >屬性 - > C/C++ - >高級 - >禁用特定警告)。在命令行上,使用/wd4995可以達到相同的效果。

+0

任何其他解決這些問題的方法都不禁用代碼或設置?謝謝。 – 2010-03-11 01:03:10

+2

@Tommy:編譯器獲取兩個輸入:一組命令行參數和源文件。如果你想告訴它做什麼,你必須在這兩個地方之一這樣做。 – 2010-03-11 01:41:09

11

除了上述的答案,這是值得提的是,它往往是很好的做法,只在有限的範圍內禁用警告(這一點,如果你把在頭文件這些編譯尤其重要):

#pragma warning (disable : 4121) // alignment of a member was sensitive to packing 

#include <third-party-header.h> 

#pragma warning (default : 4121) // Restore default handling of warning 

另一種方法是使用push/pop機制。

#pragma warning(push) 
#pragma warning(disable: 4018) // signed/unsigned mismatch 
#pragma warning(disable: 4100) // unreferenced formal parameter 
#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated 
#pragma warning(disable: 4710) // 'function' : function not inlined 
#pragma warning(disable: 4503) // decorated name length exceeded, name was truncated 

#include <third-party-header1.h> 
#include <third-party-header2.h> 
#include <third-party-header3.h> 
#include <third-party-header4.h> 

#pragma warning(pop) 
+3

請注意,您還可以在一個預處理器指令中禁用多個警告:'#pragma warning(disable:4018 4100)'。剛纔已經說過,我真的很喜歡你如何在旁邊放置每個警告的原因。 – 2010-03-11 01:37:55