다음을 통해 공유


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