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 int
hodnotu, 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;