清理使用硬编码整数文字而不是枚举的旧c / c ++代码,找到功能声明已被正确重构但不是正文的地方是很繁琐的。 e.g。
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)或平台(大多数)中,手动运行几次就足够了,但我更喜欢不太有用的东西深奥或昂贵。
答案 0 :(得分:1)
lint将为您提供此警告(条件641)
641将枚举转换为int - 在上下文中使用枚举类型 需要计算,例如算术运算符的参数或者是 与积分论证相比较。如果你这个警告将被禁止 使用枚举的整数模型(+ fie)但是你会失去一些有价值的东西 这样做的类型检查。中间政策就是简单地关闭它 警告。仍将捕获int到枚举的赋值。
Splint(http://www.splint.org/download.html)是一种可以使用的现代棉绒
答案 1 :(得分:1)
Sparse(Linux内核人员使用的语义检查工具)可以帮助您完成其中的一些工作。
这些选项可以捕获枚举错误的子集:-Wenum-mismatch,-Wcast-truncate。但是,我通过这个运行你的代码,看起来并没有被捕获。
这是免费软件,如果你想扩展它。