次の方法で共有


コンパイラ警告 (レベル 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.
}