代码之家  ›  专栏  ›  技术社区  ›  spires

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

  •  4
  • spires  · 技术社区  · 10 年前

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

    • 我将警告级别设置为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”/error报告:提示/WX/Zc:forScope/RTC1/Gd/Oy-/MTd/Fa“generated \debug.intermediate”/EHsc/nologo/Fo \debug\intermediate\“/fp”生成\debug \intermedite\blahDebug.pch“

    • 我正在迭代一个不断调试的函数,遍历代码等等——所以我知道代码正在运行。但如果我掷“intblah=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;
    }
    
    2 回复  |  直到 9 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    在示例代码中 int blah = 1; 两者都声明变量并赋值给它。VisualStudio将此赋值计算为变量的“引用”,从而避免了 C4101 unreferenced local variable 您预期的错误。

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

    请注意,编译器可以标记未使用 参数 ,即使它们是用默认参数初始化的。如果通过使用警告级别4 /W4 /Wall ,则未使用的参数将导致 C4100 unreferenced parameter 警告这是一个非常好的主意 /第4周 /墙 ,而不是默认值 /W3 .

        2
  •  0
  •   orbitcowboy    10 年前

    正如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.
    

    目前它不检测未使用的参数。