dan*_*nio 21 c++ compiler-warnings visual-c++
-Wshadow将"当局部变量影响另一个局部变量时发出警告." Visual C++(2008)中是否存在等价物?我试过/ W4但它没有接受它.我也试过Cppcheck,但也没看到.
例如,如果我无意中做了:
class A
{
private:
int memberVar;
public:
void fn()
{
int memberVar = 27;
}
};
Run Code Online (Sandbox Code Playgroud)
我真的很想知道它!
但是您需要启用自动代码分析才能获取它们,请参阅 如何:启用和禁用C/C++的自动代码分析
如果在VS版本中无法执行此操作(使用代码分析分析托管代码质量),请尝试将/ analyze标志添加到编译命令行.您将收到一些警告,表示IDE已添加的'/ analyze-'标志被替换为手动添加的'/ analyze'标志,但分析将起作用;-)
我不敢.
您也许可以尝试使用Clang编译代码:
我们在工作中使用gcc来构建我们的代码,但是定期与Clang一起编译以测试代码与标准的一致性并从其警告中受益.
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
}
}
Run Code Online (Sandbox Code Playgroud)
x 的内部声明隐藏了函数 f 的参数,因此编译器将发出:警告 C4457:'x' 的声明隐藏函数参数 y 的内部声明隐藏了函数作用域中 y 的声明,因此编译器将发出:警告 C4456:“y”的声明隐藏了先前的局部声明 请注意,与以前一样,与函数参数同名但未包含在内部作用域中的变量声明会触发错误:
void f(int x)
{
char x; //C2082
}
Run Code Online (Sandbox Code Playgroud)
编译器发出:错误 C2082:形式参数“x”的重新定义