컴파일러 경고(수준 4) C4463
넘치다; low_value 값만 보유할 수 있는 비트 필드에 값 할당 high_value
할당된 값 은 비트 필드가 보유할 수 있는 값 범위를 벗어났습니다. 부호 있는 비트 필드 형식은 부호에 상위 비트를 사용하므로 n이 비트 필드 크기인 경우 부호 있는 비트 필드의 범위는 -2n-1에서 2n-1-1이고 서명되지 않은 비트 필드는 0에서 2n-1까지의 범위를 갖습니다.
예시
이 예제에서는 -2에서 1까지의 범위가 있는 크기가 2인 형식 int
의 비트 필드에 값 3을 할당하려고 하므로 C4463을 생성합니다.
이 문제를 해결하려면 할당된 값을 허용된 범위의 값으로 변경할 수 있습니다. 비트 필드가 0에서 3까지의 범위에서 부호 없는 값을 보유하도록 의도된 경우 선언 유형을 unsigned
.로 변경할 수 있습니다. 필드가 -4에서 3 범위의 값을 보유하도록 의도된 경우 비트 필드 크기를 3으로 변경할 수 있습니다.
// C4463_overflow.cpp
// compile with: cl /W4 /EHsc C4463_overflow.cpp
struct S {
int x : 2; // int type treats high-order bit as sign
};
int main() {
S s;
s.x = 3; // warning C4463: overflow; assigning 3
// to bit-field that can only hold values from -2 to 1
// To fix, change assigned value to fit in range,
// increase size of bitfield, and/or change base type
// to unsigned.
}