Visual Studio 2013未显示未引用的变量警告
Visual Studio 2013 not displaying unreferenced variable warnings
我在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.
目前,它没有检测到未使用的参数。
- 使用typeid警告未使用的变量
- 警告:左移计数 >= 在 C++ 中将字节流读取为双精度变量时的类型宽度
- 警告 C4101 未引用的局部变量
- C++未使用的变量警告,即使我在函数结束时返回它
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- 我可以在初始化之前使用 std::array 成员变量中的 data() 指针吗?发出警告
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- 三元运算符:编译器不发出局部变量警告的返回引用
- 避免在 openmp 并行块中使用预编译器语句出现未使用的变量警告
- 如何使用非平凡析构函数防止未使用的变量警告
- Visual Studio 2013未显示未引用的变量警告
- -变量警告
- 在 catch 块中使用 g++ 或 clang++ 启用未引用的局部变量警告
- 未使用的变量警告因自动变量而异
- 纯虚函数=未引用的局部变量警告
- 如何在Eclipse中禁用未使用变量警告?
- 捕获带有未引用局部变量警告的异常
- 返回指针到本地变量??(警告C4172)
- 当在if-else语句中声明时,C++编译器会发出单元化变量警告
- GCC 中的断言和未使用的局部变量警告不能很好地混合?