在Visual C ++中是否有相当于gcc的-Wshadow

时间:2011-06-03 09:06:03

标签: c++ visual-c++ compiler-warnings

-Wshadow将“当局部变量影响另一个局部变量时发出警告。” Visual C ++(2008)中是否存在等价物?我试过/ W4但它没有接受它。我也试过Cppcheck,但也没看到。

e.g。如果我不小心做了:

class A
{
        private:
                int memberVar;
        public:
                void fn()
                {
                        int memberVar = 27;
                }
};

我真的很想知道它!

5 个答案:

答案 0 :(得分:9)

查看警告 C6244C6246

但是你需要启用自动代码分析来获取它们,请参阅 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编译代码:

  • 它有这个警告(还有很多其他的)
  • 它具有MSVC标头的兼容模式(并且可以构建大部分MFC)

我们在工作中使用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请求将警告从代码分析升级到标准编译。我建议不要试图引起微软的注意。