Partager via


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 inten , 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;