Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;