-Wshadow将“当局部变量影响另一个局部变量时发出警告。” Visual C ++(2008)中是否存在等价物?我试过/ W4但它没有接受它。我也试过Cppcheck,但也没看到。
e.g。如果我不小心做了:
class A
{
private:
int memberVar;
public:
void fn()
{
int memberVar = 27;
}
};
我真的很想知道它!
答案 0 :(得分:9)
但是你需要启用自动代码分析来获取它们,请参阅 How to: Enable and Disable Automatic Code Analysis for C/C++
如果您无法在VS版本(Analyzing Managed Code Quality by Using Code Analysis)中执行此操作,请尝试将/ analyze标志添加到编译命令行。你会得到一些警告,你的IDE添加的'/ analyze-'标志被替换为手动添加的'/ analyze'标志,但分析将起作用; - )
答案 1 :(得分:7)
我恐怕没有。
您可以尝试使用Clang编译代码:
我们在工作中使用gcc来构建我们的代码,但是定期与Clang一起编译以测试代码与标准的一致性并从其警告中受益。
答案 2 :(得分:4)
没有关于这个disabled by default的警告,所以如果你没有看到默认级别的警告,我会说它无法完成。 (这是蹩脚的。)
答案 3 :(得分:4)
Visual Studio 2015现在默认警告阴影变量。摘录自http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx:
阴影变量 变量声明"阴影"如果封闭范围已包含具有相同名称的变量,则为另一个。例如:
void f(int x)
{
int y;
{
char x; //C4457
char y; //C4456
}
}
x的内部声明影响函数f的参数,因此编译器将发出: 警告C4457:声明' x'隐藏功能参数 y的内部声明在函数作用域中隐藏y的声明,因此编译器将发出: 警告C4456:宣布' y'隐藏以前的本地声明 请注意,与以前一样,与函数参数同名但未包含在内部作用域中的变量声明会触发错误:
void f(int x)
{
char x; //C2082
}
编译器发出: 错误C2082:重新定义形式参数' x'
答案 4 :(得分:1)
(我会将此作为对Dawn答案的评论,但目前声誉不足)
Microsoft Connect上有一个issue请求将警告从代码分析升级到标准编译。我建议不要试图引起微软的注意。