在我正在處理的產品中發現了幾個令人討厭的錯誤,所有這些錯誤都與switch語句中的無意中「跌倒」有關。在C代碼中發現「穿透」
現在,我想更進一步 - 我希望檢測大量C代碼中的switch語句。 我只能使用Linux和gcc 5.6進行編譯(所以沒有叮噹聲或更新的gcc;這是因爲我們項目的目標架構不存在新的gcc)。
這是一個代碼,而告吹:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
這是秋天穿通代碼:我
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
您應該研究術語* statical analysis *和* linter *。 –
我做過了,它看起來很少涉及穿透。我知道最新的gcc中有一個開關,但我不能使用該版本的gcc。 – VividD
你的兩個例子都有「fall throughs」 - 情況'0'落入情況'1'。無論如何,如果你想檢測這樣的事情,寫一些解析你的源文件的代碼,並尖叫是否符合你想要的條件。 C編譯器通常不會診斷這些事情,因爲代碼是有效的 - 所以你編寫代碼來自己做。 – Peter