Udostępnij przez


Ostrzeżenie kompilatora (poziom 4) C4770

częściowo zweryfikowane wyliczenie "symbol" używane jako indeks

Uwagi

Kompilator ostrzega, czy wartość wyliczenia jest rzutowana lub aliasowana do typu całkowitego, ale wynik nie jest sprawdzany pod kątem wartości nieujemnych ani nadmiernych.

To ostrzeżenie jest nowe w programie Visual Studio 2013. Nie jest ona domyślnie włączona. Aby włączyć je jako ostrzeżenie poziomu 1, użyj polecenia /w14770. Aby uzyskać informacje na temat wyłączania ostrzeżeń według wersji kompilatora, zobacz Ostrzeżenia kompilatora według wersji kompilatora.

Przykład

Poniższy kod generuje ostrzeżenie 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];
}

Aby naprawić ostrzeżenie, możesz rzutować wartość w czeku na unsigned intwartość , która niejawnie wymusza wartość nieujemną:

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

Lub jawnie sprawdź, czy nie jest ujemna wartość:

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