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 int
umwandeln, 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;