共用方式為


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