Partager via


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