다음을 통해 공유


컴파일러 경고(수준 4) C4770

인덱스로 사용되는 부분적으로 유효성이 검사된 열거형 'symbol'입니다.

컴파일러는 열거형 값이 정수 형식으로 캐스팅되거나 별칭이 지정되면 경고하지만 결과가 음수가 아니거나 과도한 값인지는 확인되지 않습니다.

설명

이 경고는 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;