Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
«symbol» enum parcialmente validado utilizado como índice
Observações
O compilador emite um aviso se um valor de enum for convertido ou referenciado como um tipo inteiro, mas o resultado não for verificado para assegurar que não é negativo ou excessivo.
Este aviso é novo no Visual Studio 2013. Não está ativado por predefinição. Para ativá-lo como um aviso de nível 1, use /w14770. Para obter informações sobre como desativar avisos por versão do compilador, consulte Avisos do compilador por versão do compilador.
Example
O código a seguir produz aviso 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 corrigir o aviso, podes converter o valor na verificação para unsigned int, o que implicitamente força um valor não negativo:
if ((unsigned int)(e1) >= E_MAX)
return 0;
Ou, verifique explicitamente se há um valor não negativo:
if ((int)(e1) >= E_MAX || (int)(e1) < 0)
return 0;