2017-07-10 35 views
1

我有一個用C語言編寫的大型代碼庫,有幾個枚舉。最近我修改了其中的一個枚舉,並且產生了重大影響,因爲我有點「錯誤」 - 評估了影響。 有看起來像這樣的枚舉: -如何靜態檢測由於代碼更改而引入的錯誤?

typedef enum en_e_type 
{ 
ENUM_VAL_1 = 1, 
ENUM_VAL_2 = 2, 
ENUM_VAL_3 = 3, 
ENUM_VAL_MAX = 4, 
}en_e; 

這得到了改變,以

typedef enum en_e_type 
{ 
ENUM_VAL_1 = 1, 
ENUM_VAL_2 = 2, 
ENUM_VAL_3 = 3, 
ENUM_VAL_MAX = ENUM_VAL_3 , 
}en_e; 

我們可以看出,ENUM_VAL_MAX價值得到了修改。 有一些聲稱在我的代碼看起來像這樣

ASSERT (in_value < ENUM_VAL_MAX) 

還有一些,如果這樣的情況: -

if (in_val < ENUM_VAL_MAX) 

我們總是與新枚舉變化預期in_value < ENUM_VAL_MAXasserts和如果條件應該相應地修改,但其中一些錯過了,因此也是問題。

我的問題是,識別這類錯誤的最好方法是什麼?是否有一些靜態分析工具查看代碼差異並相應地分析其影響?例如。在這種情況下,是否有一種工具可能會指向這些if/assert條件(通過靜態解析代碼)併發出一些警告?我看着Helgrind,但似乎沒有幫助。

回答

1

你可能不希望聽到這一點,但:

  1. 斷言,應根據記錄的行爲。在這種情況下,應該在枚舉值之上有一個摘要,說明ENUM_VAL_MAX比任何前面的值大。

  2. 重構時,總是做一次右鍵單擊 - >檢查引用(大多數IDE有這個選項)並滾動瀏覽它。您會在總覽中看到它正在使用的代碼行,因此您會檢測到比較結果。

相關問題