【发布时间】:2010-01-18 10:05:23
【问题描述】:
清理使用硬编码整数文字而不是枚举的旧 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)或平台(大多数)中,手动运行几次就足够了,但我更喜欢不是太深奥或昂贵。
【问题讨论】:
-
gcc 不能完美处理这个问题吗?我正在使用 g++ 并且总是看到描述的警告。纯 C 编译器的行为是否不同?
-
否,编译此代码(减去 ... 并加上一个空的 main()):g++ -Wall test.cpp 给出 0 个警告。警告从 int 到 enum 的提升,但不是相反。如果您有其他工作方式,请给我您的命令行。请...