Dela via


Kompilatorvarning (nivå 4) C4770

delvis verifierat uppräkningstecken som används som index

Anmärkningar

Kompilatorn varnar om ett uppräkningsvärde kastas eller kopplas till en heltalstyp, men resultatet kontrolleras inte för icke-negativa eller alltför stora värden.

Den här varningen är ny i Visual Studio 2013. Det är inte aktiverat som standard. Om du vill aktivera den som en varning på nivå 1 använder du /w14770. Information om hur du inaktiverar varningar efter kompilatorversion finns i Kompilatorvarningar efter kompilatorversion.

Example

Följande kod genererar varning 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];
}

För att åtgärda varningen kan du omvandla värdet i kontrollen till unsigned int, vilket implicit tvingar fram ett icke-negativt värde:

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

Du kan också uttryckligen söka efter ett icke-negativt värde:

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