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 unsigned
in " ä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.
}