Compartir a través de


Advertencia del compilador (nivel 4) C4770

enumeración 'symbol' validada parcialmente usada como índice

El compilador advierte si un valor de enumeración se convierte o se aplica un alias a un tipo entero, pero el resultado no se comprueba si hay valores no negativos o excesivos.

Comentarios

Esta advertencia es nueva en Visual Studio 2013. que no está habilitado de manera predeterminada. Para habilitarlo como advertencia de nivel 1, use /w14770. Para información sobre cómo deshabilitar las advertencias por versión del compilador, consulte Advertencias del compilador por versión del compilador.

Ejemplo

El código siguiente genera la advertencia 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];
}

Para corregir la advertencia, podría convertir el valor de la comprobación unsigned inten , que fuerza implícitamente un valor no negativo:

    if ((unsigned int)(e1) >= E_MAX) 
        return 0;

O bien, compruebe explícitamente si hay un valor no negativo:

    if ((int)(e1) >= E_MAX || (int)(e1) < 0)
        return 0;