Partilhar via


Aviso do compilador (nível 4) C4770

'símbolo' de enum parcialmente validado usado como índice

O compilador avisa se um valor de enum é convertido ou aliado para um tipo inteiro, mas o resultado não é verificado para valores não negativos ou excessivos.

Comentários

Esse aviso é novo no Visual Studio 2013. Ela não vem habilitada por padrão. Para habilitá-lo como um aviso de nível 1, use /w14770. Para obter informações sobre como desabilitar avisos por versão do compilador, consulte Avisos do compilador por versão do compilador.

Exemplo

O código a seguir produz o 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, você pode 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;