禁用单个警告错误
有没有办法使用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
。
以上所有的非#pragma
build议都归结为添加一条语句:
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
,你必须disable
和enable
:
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