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 int
en , 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;