編譯程式警告 (層級 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;