我们使用的是VS 2008。
有一个很大的枚举,由许多开发人员填充。
这个枚举有一个__int64类型(一个Microsoft扩展),我想让编译器报告枚举中非唯一值。
如果它是一个普通的枚举,我会像这样做:
enum E1
{
E11 = 0x01F00,
E12 = 0x01F00,
E13
};
#pragma warning(push)
#pragma warning(error: 4061)
#pragma warning(error: 4062)
void F(E1 e1)
{
switch (e1)
{
case E11:
case E12:
case E13:
return;
}
}
#pragma warning(pop)
如果E1有两个相同的值,函数F将会出错。
如果开发人员忘记将新值添加到switch中,它也会出现另一个错误。
但是我的枚举类型为__int64(或long long)。
当我尝试为E1 e1执行相同的switch时,它会截断值并抱怨差异为0x100000000或0x200000000的值。
如果我将e1强制转换为__int64,则编译器不会抱怨,即使开发人员忘记将新值添加到switch中(因此整个检查函数变得无用)。
问题是:有没有人知道我该怎么做?或者VS 2008(或C ++)是否有另一种工具来确保枚举:__int64只有唯一的值?