清理使用硬编码整数文字而不是枚举的旧c/C++代码,找到函数声明已被正确重构但不是主体的地方是很繁琐的。例如是否有任何可以警告(或给出错误)或枚举转换为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)或平台(大多数)中,手动运行它几次就足够了,但我更喜欢那些不是太深奥或昂贵。
不是gcc处理这个完美吗?我使用g ++并总是看到描述的警告。纯粹的C编译器的行为有什么不同? – Basilevs 2010-01-18 10:14:27
不,编译此代码(减...并加上一个空的main()):g ++ -Wall test.cpp给出0个警告。从int到enum的提升受到警告,但不是其他方式。如果你有其他方式工作,请给我你的命令行。请... – 2010-01-18 10:51:22