2013-02-26 63 views
0

工作,我創建了使用VS2010控制檯應用程序像下面代碼分析不會在VS 2010中

int test(int i) 
{ 
if (i == 0) 
    return 0; 
else 
    return 1; 
int j = 2; 
j++; 

return j; 
} 

void deadCode(char * pa) 
{ 
printf("%s", pa); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    test(2); 
    return 0; 
} 

我檢查「啓用代碼分析C/C++的編譯」,並選擇規則集「微軟所有規則」,當我建立這個項目,我

1> RunCodeAnalysis:

1>運行代碼分析...

1>代碼分析完成 - 0個錯誤,0警告(S)

我預期在測試加粗部分()「CA1804」的警告,應顯示爲死代碼deadCode另一個警告()。

我的問題是爲什麼代碼分析沒趕上缺陷?我還嘗試創建僅啓用CA1804警告的規則集,但結果與上述內容(Microsoft所有規則)相同。

任何想法?

回答

1
  • 使用的功能都沒有 「死碼」。想象一下,你正在編寫一個庫 - 它可能會向用戶展示它不會使用的函數。
  • 至於CA1804,我只能假設:大概的分析不深入足夠創建一個完整的控制流圖,並注意if/else塊之後的代碼無法達成。但即使做了全面的分析,我希望「死碼」的if塊後的警告爲test()的一部分,而不是一個「未使用的本地」警告 - 如果代碼是可達的,j將被使用。
+0

我本來期望它雖然找到一種方法裏面可達代碼。 – ChrisF 2013-02-26 23:09:08

+0

第一部分,是的,圖書館是真的。但我的項目生成可執行文件,所以未使用的函數意味着死代碼。 – Liyilin 2013-02-26 23:14:23

+0

@利林林是的,但靜態代碼分析儀應該如何注意這一點?它必須檢查項目配置。而且,捕捉這種'死代碼'並不重要!函數中的死代碼幾乎總是意味着程序員錯誤 - 您實現了永遠不會到達的邏輯。未使用的函數可能出於多種原因:已經實現但尚未使用的代碼,庫代碼... – us2012 2013-02-26 23:18:11