编译器警告(等级 4)C4770
用作索引的部分验证的枚举 'symbol'
如果枚举值被强制转换为整数类型,但对于非负值或过度值,则编译器将发出警告,但结果不会检查。
备注
此警告是 Visual Studio 2013 的新增功能。 默认情况下不启用此功能。 若要将其作为级别 1 警告启用,请使用 /w14770
。 有关如何按编译器版本禁用警告的信息,请参阅由编译器版本引发的编译器警告。
示例
以下代码生成警告 C4770:
// c4770.cpp
// compile by using: cl /GL /w14770 c4770.cpp
enum E { a 0, b, c, E_MAX };
int main(int argc, char *argv[])
{
const E e1 = E(argc); // value unknown at compile time
if ((int)(e1) >= E_MAX)
return 0;
const int n = e1 + e1; // C4770 partially validated enum used as index
return argv[n][n];
}
若要修复警告,可以将 unsigned int
检查中的值强制转换为非负值:
if ((unsigned int)(e1) >= E_MAX)
return 0;
或者,显式检查非负值:
if ((int)(e1) >= E_MAX || (int)(e1) < 0)
return 0;