禁用单个警告错误

有没有办法使用Visual Studio在cpp文件中禁用单个警告行?

例如,如果我捕捉到一个exception,而不处理它,我得到错误4101(未引用的本地variables)。 有没有办法忽略这个function,但否则在编译单元报告呢? 目前,我把#pragma warning (disable : 4101)放在文件的顶部,但显然只是closures整个单元。

 #pragma warning( push ) #pragma warning( disable : 4101) // Your function #pragma warning( pop ) 

如果您只想在单行代码中suppress 警告 ,则可以使用suppress 警告说明符 :

 #pragma warning(suppress: 4101) // here goes your single line of code where the warning occurs 

对于单行代码,这与编写以下内容相同:

 #pragma warning(push) #pragma warning(disable: 4101) // here goes your code where the warning occurs #pragma warning(pop) 

#pragma push / pop通常是这类问题的解决scheme,但在这种情况下,为什么不移除未引用的variables呢?

 try { // ... } catch(const your_exception_type &) // type specified but no variable declared { // ... } 

使用#pragma warning ( push ) ,然后#pragma warning ( disable ) ,然后把你的代码,然后使用#pragma warning ( pop )如下所述:

 #pragma warning( push ) #pragma warning( disable : WarningCode) // code with warning #pragma warning( pop ) 

不要把它放在文件的顶部(甚至是头文件),只要用#pragma warning (push)#pragma warning (disable)和一个匹配的#pragma warning (pop)包装代码,如下所示。

虽然还有其他一些选项,包括#pramga warning (once)

也可以使用UNREFERENCED_PARAMETER定义的WinNT.H 。 定义只是:

 #define UNREFERENCED_PARAMETER(P) (P) 

并使用它:

 void OnMessage(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(lParam); } 

你为什么要使用它,你可能会争辩说,你可以忽略variables名称本身。 那么,有些情况下(不同的项目configuration,debugging/发布版本)variables可能实际上被使用。 在另一个configuration中,这个variables没有被使用(因此是警告)。

一些静态代码分析可能仍然会给出这个非无关紧要的声明( wParam; )的警告。 在这种情况下,您可以在debugging版本中使用与UNREFERENCED_PARAMETER相同的UNREFERENCED_PARAMETER ,并在发布版本中执行P=P

 #define DBG_UNREFERENCED_PARAMETER(P) (P) = (P) 

在某些情况下,你必须有一个命名参数,但是你不要直接使用它。
例如,我在VS2010中遇到了这个问题,当'e'只在decltype语句中使用时,编译器会抱怨,但是你必须拥有指定的variablese

以上所有的非#pragmabuild议都归结为添加一条语句:

 bool f(int e) { // code not using e return true; e; // use without doing anything } 

如果你想禁用unreferenced local variable写入某个头部

 template<class T> void ignore (const T & ) {} 

并使用

 catch(const Except & excpt) { ignore(excpt); // No warning // ... } 

例:

 #pragma warning(suppress:0000) // (suppress one error in the next line) 

此编译指示适用于从Visual Studio 2005开始的C ++
https://msdn.microsoft.com/en-us/library/2c8f766e(v=vs.80).aspx

该编译指示对于通过Visual Studio 2005到Visual Studio 2015的C#无效。
错误:“预期禁用或恢复”。
(我想他们从来没有执行suppress … …)
https://msdn.microsoft.com/en-us/library/441722ys(v=vs.140).aspx

C#需要不同的格式。 它看起来像这样(但不工作):

 #pragma warning suppress 0642 // (suppress one error in the next line) 

而不是suppress ,你必须disableenable

 if (condition) #pragma warning disable 0642 ; // Empty statement HERE provokes Warning: "Possible mistaken empty statement" (CS0642) #pragma warning restore 0642 else 

这太难看了,我认为重新devise它更聪明:

 if (condition) { // Do nothing (because blah blah blah). } else