Avertissement du compilateur (niveau 4) C4770
énumération partiellement validée 'symbol' utilisée comme index
Le compilateur avertit si une valeur enum est castée ou aliasée en type entier, mais que le résultat n’est pas vérifié pour les valeurs non négatives ou excessives.
Notes
Cet avertissement est nouveau dans Visual Studio 2013. Elle n’est pas activée par défaut. Pour l’activer en tant qu’avertissement de niveau 1, utilisez /w14770
. Pour plus d’informations sur la désactivation des avertissements par version du compilateur, consultez avertissements du compilateur par version du compilateur.
Exemple
Le code suivant génère l’avertissement 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];
}
Pour corriger l’avertissement, vous pouvez convertir la valeur dans la vérification unsigned int
en , ce qui force implicitement une valeur non négative :
if ((unsigned int)(e1) >= E_MAX)
return 0;
Ou vérifiez explicitement une valeur non négative :
if ((int)(e1) >= E_MAX || (int)(e1) < 0)
return 0;