是否有任何c/c ++编译器可以警告(或给出错误)或枚举转换为int?

Eri*_*ren 6 c c++ enums warnings

清理使用硬编码整数文字而不是枚举的旧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;
  }
}
Run Code Online (Sandbox Code Playgroud)

注释/修改每个枚举类型或通过代码搜索它们也是相当多的工作,因为存在非常多的不同枚举,因此这不是优选的,但可以是可接受的解决方案.

我不需要它在我们的任何主编译器或其他工具(主要是gcc)或平台(大多数),手动运行几次就足够了,但我更喜欢不太深奥或昂贵的东西.

jsp*_*cal 1

lint 将为您提供此警告(条件 641)

641 将 enum 转换为 int ——在需要计算的上下文中使用枚举类型,例如算术运算符的参数或与整型参数进行比较。如果您使用枚举的整数模型(+fie),此警告将被抑制,但这样做会丢失一些有价值的类型检查。中间策略是简单地关闭此警告。int 到 enum 的赋值仍然会被捕获。

Splint ( http://www.splint.org/download.html ) 是您可以使用的现代 lint