Condividi tramite


Avviso del compilatore (livello 4) C4770

enumerazione parzialmente convalidata 'symbol' usata come indice

Il compilatore avvisa se viene eseguito il cast o l'aliasing di un valore enumerazione a un tipo integer, ma il risultato non viene controllato per i valori non negativi o eccessivi.

Osservazioni:

Questo avviso è una novità di Visual Studio 2013. Non è abilitata per impostazione predefinita. Per abilitarlo come avviso di livello 1, usare /w14770. Per informazioni su come disabilitare gli avvisi in base alla versione del compilatore, vedere Avvisi del compilatore per versione del compilatore.

Esempio

Il codice seguente genera l'avviso 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];
}

Per correggere l'avviso, è possibile eseguire il cast del valore nel controllo a unsigned int, che forza in modo implicito un valore non negativo:

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

In alternativa, verificare in modo esplicito la presenza di un valore non negativo:

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