컴파일러 경고(수준 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;