2011-06-03 32 views
20

-Wshadow会“只要局部变量影响另一个局部变量就报警”。在Visual C++(2008)中是否存在等价物?我试过/ W4,但它没有接受它。我也试过Cppcheck,但是也没有看到它。在Visual C++中是否有相当于gcc的-Wshadow

例如如果我无意中做:

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

我真的想了解它!

+1

这可能会感兴趣的你。 http://stackoverflow.com/questions/486508/how-does-template-argument-shadowing-work-in-vs2005 – 2011-06-03 09:46:03

回答

7

恐怕没有。

也许你可以尝试编译铿锵代码:

  • 它有这个警告(和很多其他人的)
  • 它有MSVC头兼容模式(并且能够以最MFC的)

我们在工作中使用gcc来构建我们的代码,但是定期使用Clang进行编译,以测试代码是否符合标准并受益于其警告。

4

没有关于这个的警告,这是disabled by default,所以如果你没有看到默认级别的警告,我会说这是不能做到的。 (这是跛脚。)

7

退房警告 C6244C6246

但是,你将需要启用自动代码分析,让他们见 How to: Enable and Disable Automatic Code Analysis for C/C++

如果你不能在你的VS版本做(Analyzing Managed Code Quality by Using Code Analysis)尝试将/分析标志添加到编译命令行。你会得到一些警告,说明你的IDE添加的'/ analyze-'标志被替换为手动添加的'/ analyze'标志,但是分析会起作用;-)

+2

恕我直言。这些警告不应该分析警告...... – Calmarius 2014-05-28 15:18:17

+0

MSDN现在在第一个链接上显示“此主题不再可用”。 – pjc50 2014-09-10 13:07:02

+0

@ pjc50如果你选择了一个不同的版本,它可以工作,例如http://msdn.microsoft.com/en-us/library/6yz6c9dy(v=vs.100).aspx – dwn 2014-09-24 12:53:48

1

(我会添加这是作为对黎明的回答评论,但目前没有足够的声誉)

有一个issue打开微软连接请愿,有从代码分析升级到标准编译的警告。我建议大家试着引起微软的注意。

+0

根据该链接,这是++在Visual C的下一个主要版本。 – Kim 2014-07-24 11:47:48

+1

这已经出现在Visual Studio 2015年预览:http://blogs.msdn.com/b/vcblog/archive/2014/11/12/improvements-to-warnings-in-the-c-compiler.aspx – Kim 2015-03-26 10:28:41

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的声明,所以编译器会发出: 警告C4456:的“Y”的声明,作为前隐藏了先前的一个局部声明 注意,声明一个变量具有相同的名称作为函数参数,但不是封闭在一个内部示波器会触发错误代码:

void f(int x) 
{ 
    char x; //C2082 
} 

编译器发出: 错误C2082:正式参数的重新定义 'X'

相关问题