Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
überfließen; 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.
}