Sdílet prostřednictvím


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

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

Poznámky

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.

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;