簡體   English   中英

是否有任何c / c ++編譯器可以警告(或給出錯誤)或枚舉轉換為int?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM