2011-06-03 83 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'

相關問題