Compilerwarnung (Ebene 4) C4463

Überlauf; Zuweisen eines Werts zu Bitfeldern, die nur Werte von low_value bis high_value enthalten können

Der zugewiesene Wert liegt außerhalb des Wertebereichs, den das Bitfeld enthalten kann. Signierte Bitfeldtypen verwenden das Bit mit hoher Reihenfolge für das Zeichen. Wenn n also die Bitfeldgröße ist, ist der Bereich für signierte Bitfelder -2n-1 bis 2n-1-1, während nicht signierte Bitfelder einen Bereich von 0 bis 2n-1 aufweisen.

Beispiel

In diesem Beispiel wird C4463 generiert, da versucht wird, einem Bitfeld vom Typ int 3 einen Wert mit einer Größe von 2 zuzuweisen, der einen Bereich von -2 bis 1 aufweist.

Um dieses Problem zu beheben, können Sie den zugewiesenen Wert in etwas im zulässigen Bereich ändern. Wenn das Bitfeld nicht signierte Werte im Bereich von 0 bis 3 enthalten soll, können Sie den Deklarationstyp unsignedin " ändern. Wenn das Feld Werte im Bereich -4 bis 3 enthalten soll, können Sie die Bitfeldgröße auf 3 ändern.

// 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.
}