Share via


Upozornění kompilátoru (úroveň 4) C4770

částečně ověřený výčet symbol použitý jako index

Kompilátor varuje, pokud je hodnota výčtu přetypována nebo aliasována na celočíselném typu, ale výsledek se nekontroluje u nezáporných nebo nadměrných hodnot.

Poznámky

Toto upozornění je nové v sadě Visual Studio 2013. Ve výchozím nastavení není povolená. Pokud ho chcete povolit jako upozornění úrovně 1, použijte /w14770. Informace o tom, jak zakázat upozornění podle verze kompilátoru, naleznete v tématu Upozornění kompilátoru podle verze kompilátoru.

Příklad

Následující kód vygeneruje upozornění 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];
}

Pokud chcete upozornění opravit, můžete přetypovat hodnotu v kontrole na unsigned inthodnotu, která implicitně vynutí nezápornou hodnotu:

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

Nebo explicitně zkontrolujte nezápornou hodnotu:

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