Visual Studio 2013未显示未引用的变量警告

Visual Studio 2013 not displaying unreferenced variable warnings

本文关键字:变量 警告 引用 显示 Studio 2013 Visual      更新时间:2023-10-16

我在Visual Studio 2013中进行构建,如果向函数中添加未引用的变量,编译器不会发出有关它们的警告。我尝试启用代码分析,每个线程:Visual Studio 2013编译器警告未显示但这仍然没有解决我的问题。一些附加信息:

  • 我将警告级别设置为3(/W3),将警告视为错误(/WX),并且处于未启用优化的调试构建中。

  • 我在项目->属性->配置属性->C/C++->命令行中的完整命令行是:/GS/analyze-/W3/Zc:wchar_t/ZI/Gm/Od/Fd"generated\debug\intermediate\vc120.pdb"/fp:precise/D"WIN32"/D"GLEW_STATIC"/D"_debug"/D"_WINDOWS"/D"_VC80_UPGRADE=0x0710"/D"_MBCS"/errorReport:prompt/WX/Zc:forScope/RTC1/Gd/Oy-/MTd/Fa"generated\debug\ intermediate\"/EHsc/nologo/Fo"generated/debug \ intermediate"/fp"生成\debug\中间\bahDebug.pch"

  • 我在迭代一个不断调试的函数,遍历代码等等——这样我就知道代码正在运行。但是,如果我在函数中抛出"int blah=1;"并重新编译,则不会生成任何警告。

示例代码:

bool MyClass::doSomething(int someParameter)
{
    int blah = 1;
    // run the normal function logic here
    // 'someParameter' is referenced, but 'blah' never is.
    // when i compile, i receive no warning that 'blah' is unreferenced.
    return true;
}

在您的示例代码中,语句int blah = 1;既声明了变量又为其赋值。Visual Studio将此赋值视为变量的"引用",从而避免了您所期望的C4101未引用局部变量错误。

要定位和删除已初始化但从未使用过的变量,可以使用静态分析工具,如Preast或CppCheck。这里有一个这样的工具列表,尽管它可能已经过时了

请注意,编译器可以标记未使用的参数,即使它们是用默认参数初始化的。如果通过/W4/Wall使用警告级别4,则未使用的参数将导致C4100未引用的参数警告。始终以/W4/Wall而不是默认的/W3进行构建是一个非常好的主意。

正如Ryan Bemrose所概述的,静态代码分析工具可以用于检测源代码中未使用的资源。

看看以下功能:

bool foo(int unusedParameter)
{
  int unusedVariable = 1;
  return true;
}

它包含两个未使用的资源,一个是未使用的参数和一个未使用但已初始化的局部变量。Cppcheck可以使用以下命令帮助您检测未使用的本地变量:

$ cppcheck --enable=all test.cpp 
  Checking test.cpp...
  [test.cpp:3]: (style) Variable 'unusedVariable' is assigned a value that is never used.

目前,它没有检测到未使用的参数。