Freigeben über


Compilerwarnung (Ebene 4) C4770

Teilweise validiertes Enumerationssymbol, das als Index verwendet wird

Der Compiler warnt, wenn ein Enumerationswert in einen ganzzahligen Typ umgewandelt oder aliast wird, das Ergebnis jedoch nicht auf nicht negative oder übermäßige Werte überprüft wird.

Hinweise

Diese Warnung ist neu in Visual Studio 2013. Er ist nicht standardmäßig aktiviert. Um sie als Warnung der Ebene 1 zu aktivieren, verwenden Sie /w14770. Informationen zum Deaktivieren von Warnungen nach Compilerversion finden Sie unter Compilerwarnungen nach Compilerversion.

Beispiel

Der folgende Code erzeugt Warnung 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];
}

Um die Warnung zu beheben, könnten Sie den Wert in die Prüfung unsigned intumwandeln, wodurch implizit ein nicht negativer Wert erzwungen wird:

    if ((unsigned int)(e1) >= E_MAX) 
        return 0;

Oder überprüfen Sie explizit auf einen nicht negativen Wert:

    if ((int)(e1) >= E_MAX || (int)(e1) < 0)
        return 0;