Предупреждение компилятора (уровень 4) C4770
частично проверенное перечисление "символ", используемое в качестве индекса
Компилятор предупреждает, является ли значение перечисления или псевдонимом целочисленного типа, но результат не проверяется на наличие неотрицательных или чрезмерных значений.
Замечания
Это предупреждение новое в Visual Studio 2013. По умолчанию она отключена. Чтобы включить его как предупреждение уровня 1, используйте /w14770
. Сведения об отключении предупреждений по версии компилятора см. в предупреждениях компилятора по версии компилятора.
Пример
Следующий код выдает предупреждение 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];
}
Чтобы исправить предупреждение, можно привести значение в проверяемом unsigned int
объекте, которое неявно заставляет ненуждающее значение:
if ((unsigned int)(e1) >= E_MAX)
return 0;
Или явным образом проверьте значение, отличное от отрицательных значений:
if ((int)(e1) >= E_MAX || (int)(e1) < 0)
return 0;