Avertissement du compilateur (niveau 4) C4770
énumération partiellement validée 'symbol' utilisée comme index
Le compilateur avertit si une valeur d’énumération est castée ou alias en type entier, mais que le résultat n’est pas case activée 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 le case activée unsigned int
en , ce qui force implicitement une valeur non négative :
if ((unsigned int)(e1) >= E_MAX)
return 0;
Ou, explicitement case activée pour une valeur non négative :
if ((int)(e1) >= E_MAX || (int)(e1) < 0)
return 0;