2013-06-05 56 views
10

我們有一個在Eclipse中使用CDT的項目。這是一個我們剛剛導入到Eclipse中的舊項目,我想確保我們開始使用靜態代碼分析來發現任何奇怪的東西。如何關閉CDT(C代碼)中的逐行警告的靜態代碼分析警告?

事情是,有一堆行觸發警告,我們只是想忽略,主要是在switch語句中的fallthrough。

我知道如何爲lint做這件事,但對於CDT呢?是否有單行的評論,我可以放在行的上方?

例子:( 「在案件結束無中斷」)

case enChA: 
    nChannel++; 
    // I want to ignore this fallthrough  
    case enChB:  
    nChannel++; 
    // And this one... 
    case enChC: 
    nChannel++; 
    // And this one... 
    case enChD: 
    nChannel++; 
    // do some more stuff... 
    break; 
+0

這個問題可能會引起更多的興趣,並提供一個更具描述性的標題,這個標題引用switch語句中的case結尾處的break。 –

+0

@CraigMcQueen,感謝您的提示,但我實際上是在問如何關閉一行一行的靜態代碼分析。休息只是我想要關閉的警告的一個具體示例。每個人都關注這個例子,但這實際上並不是最初的問題。 –

回答

21

你應該下一個case之前嘗試

//no break 

+0

我接受了你的答案,但我也想忽略一些「未使用的變量聲明」。有關這樣做的任何提示? –

+0

謝謝。也可以作爲'/ * no break * /'或'/ *在case * /'結束時不中斷。 (我不能使用''//評論,因爲我只限於C89。) –

+0

我肯定會好奇的知道爲什麼日食中的麻木堅果決定「不休息」比* 30 *年的「下通」。他們在想什麼? –

3

解決了它。

我剛剛添加了我想要忽略的警告中的文本,以便立即在上面突破。

像這樣:

 case enChC: 
     ++nChannel; 
     //No break at the end of case 
     case enChD: 
     ++nChannel; 
+2

你可以檢查它是否適用於「不休息」? – gkovacs90

+1

我來到這裏有同樣的問題。沒有SE,我永遠不會找到這個設置。在Eclipse中默認情況下,如果在註釋中通常會出現中斷的位置(緊接下一個case語句之前)的任意位置有確切的字符串「no break」,它將刪除該警告。它不區分大小寫,甚至「給我一個犀牛破壞者」的作品! LOL – dslake

-3

要禁用惱人的通知,你需要去首選項 - > C/C++ - >編輯,然後取消選擇說「突出顯示激活代碼」選項,「顯示你輸入的問題「等。希望這有助於。

+3

這不是我想要的。我想關閉每個警告的特定實例,而不是所有實例。令人討厭的警告很重要,例如,有時候你想要通過一個案例,而其他時間則是一個錯誤,這就是爲什麼警告首先出現的原因。 –

8

這些設置位於窗口 - >首選項 - > C/C++ - >代碼分析。您可以自定義設置。例如,如果您選擇No break at the end of case,則可以定義抑制警告的評論。默認情況下它是「不中斷」。那麼巧合複製/粘貼警告消息到評論你的情況的工作:

CDT static code analysis

正如你可以看到文本不必精確匹配,它似乎並沒有區分大小寫無論是。

參考your follow-up question about unused variables:在自定義Unused variable in file scope你可以定義變量名應該被忽略:

enter image description here 有兩個神祕的預定義異常「@(#)」和「$標識」。不幸的是我找不到任何官方文件,所以我去看the source。它看起來像檢查器只是測試一個變量名稱contains()任何指定的例外。如果是,則警告被抑制。

除了Eclipse CDT,還有流行的void-casting技巧。如果編譯器警告一個未使用的變量,將其轉換爲void。這個操作沒有效果,所以它是安全的,但是從編譯器的角度來看,這個變量現在被使用了。我通常將它包裝在一個宏中以清楚地表明我在做什麼,例如

#define UNUSED(var) (void)(var) 

void foobar() 
{ 
    int b;  // not used. 
    UNUSED(b); // now it's used 
} 
1

因爲是已經說了,在這種特殊情況下,是可以解決添加評論:

//no break 

或:

//no break at the end of case 

真正重要的是(無間斷)。

但是,還需要您在本案結束和下一次之間沒有更多評論,否則它將無法工作。例如,下一個案例仍然會導致警告:

case enChC: 
    ++nChannel; 
    //No break 
    //This second case decrease the value 
    case enChD: 
    ++nChannel; 
-2

我遇到了這個問題,我只是想消除它們。 我試着添加/ * no break * /,你應該確保它在下一個「case」之前被添加。 這是我所遇到的

這個問題是我使用的解決方案:

0

您必須升級到Eclipse Oxygen.3(or.2)。

從這些版本開始,只需使用「快速修復」即可抑制警告/標記。