【发布时间】:2016-07-12 19:21:09
【问题描述】:
我在 Visual Studio 2013 中构建,如果我向函数添加未引用的变量,编译器不会抛出关于它们的警告。我尝试根据这个线程启用代码分析: 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" /errorReport:prompt /WX /Zc:forScope /RTC1 /Gd /Oy- /MTd /Fa"generated\debug\intermediate\" /EHsc /nologo / Fo"生成\调试\中间\" /Fp"生成\调试\中间\blahDebug.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;
}
【问题讨论】:
-
你到底想得到什么? unreferenced local variables 和 unreferenced parameters 之间存在差异。前者是 3 级警告,而后者是 4 级警告。请发布演示您的问题的代码。
-
谢谢,瑞恩。我添加了一些示例代码。我对未引用的局部变量(C4101)感兴趣。我尝试添加显式调用:#pragma warning(default : 4101) 以及各种警告级别,但这没有任何区别。
-
我想知道声明中的赋值是否算作“引用”变量。如果将行更改为
int blah;会引发错误吗?不幸的是,我现在没有可用的 VS 安装。 -
嗯,你是对的!如果我删除分配并离开
int blah;,则会引发警告。我不确定这是否是预期的行为。尽管 MSDN 上的示例也没有初始化,但它无法检测到尽管初始化但无法检测到使用不足,这对我来说似乎有点疯狂:msdn.microsoft.com/en-us/library/c733d5h9(v=vs.120).aspx -
这是有意的,因为初始化不是赋值,所以您使用 int 构造函数创建 blah,然后在 operator= 调用中使用 blah。不是你可能在想的只是在创造废话。使用
int blah{1};看看是否有区别。我不记得 C++ 是否有int blah(1);但这本质上是一样的。
标签: c++ visual-studio-2013 compiler-warnings