Поделиться через


Предупреждение компилятора (уровень 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;