[英]Is there any c/c++ compiler that can warn (or give error) or enum conversion to int?
清理使用硬編碼整數文字而不是枚舉的舊c / c ++代碼,找到函數聲明已被正確重構但不是正文的地方是很繁瑣的。 例如
enum important {
little = 1,
abit = 2,
much = 3
};
void blah(int e)
{
// magic stuff here
}
void boing(int e) { ... }
void guck(important e)
{
switch (e) {
case 3: // this would be a good place for a warning
blah(e); // and this
break;
default:
boing((int)e); // but this is OK (although imperfect and a warning would be acceptable)
break;
}
}
注釋/修改每個枚舉類型或通過代碼搜索它們也是相當多的工作,因為存在非常多的不同枚舉,因此這不是優選的,但可以是可接受的解決方案。
我不需要它在我們的任何主編譯器或其他工具(主要是gcc)或平台(大多數),手動運行幾次就足夠了,但我更喜歡不太深奧或昂貴的東西。
lint會為你提供這個警告(條件641)
641將枚舉轉換為int - 枚舉類型用於需要計算的上下文中,例如算術運算符的參數或與積分參數進行比較。 如果使用枚舉的整數模型(+ fie),則會禁止此警告,但這樣做會丟失一些有價值的類型檢查。 中間策略是簡單地關閉此警告。 仍將捕獲int到枚舉的賦值。
Splint( http://www.splint.org/download.html )是您可以使用的現代棉絨
稀疏 (Linux內核人員使用的語義檢查工具)可以幫助您完成其中的一些工作。
這些選項可以捕獲枚舉錯誤的子集:-Wenum-mismatch,-Wcast-truncate。 但是,我通過這個運行你的代碼,看起來並沒有被捕獲。
這是免費軟件,如果你想擴展它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.