コンパイラ警告 (レベル 4) C4463
オーバーフロー;値をビット フィールドに割り当ると、low_value から high_value への値を保持できるのみです。
割り当てられた値は、ビット フィールドが保持できる値の範囲外です。 符号付きビット フィールド型では符号に高次ビットが使用されるため、 n がビット フィールド サイズの場合、符号付きビット フィールドの範囲は -2n-1 から 2n-1-1、符号なしビット フィールドの範囲は 0~2n-1 です。
例
この例では C4463 が生成されます。これは、値 3 を型 int
のビットフィールドにサイズ 2 で割り当てるためで、範囲は -2~ 1 になります。
この問題を解決するには、割り当てられた値を許可範囲内の値に変更します。 ビット フィールドが 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.
}