Delen via


Compilerwaarschuwing (niveau 4) C4463

nl-NL: overlopen; waarde toewijzen aan bitveld dat alleen waarden van low_value tot high_value kan bevatten

Opmerkingen

De toegewezen waarde valt buiten het bereik van waarden die het bitveld kan bevatten. Ondertekende bitveldtypen gebruiken de hoge volgorde voor het teken, dus als n de grootte van het bitveld is, is het bereik voor ondertekende bitvelden -2n-1 tot 2n-1-1, terwijl niet-ondertekende bitvelden een bereik hebben tussen 0 en 2n-1.

Example

In dit voorbeeld wordt C4463 gegenereerd omdat wordt geprobeerd een waarde van 3 toe te wijzen aan een bitveld van het type int met een grootte van 2, dat een bereik heeft van -2 tot 1.

U kunt dit probleem oplossen door de toegewezen waarde te wijzigen in iets in het toegestane bereik. Als het bitveld niet-ondertekende waarden in het bereik van 0 tot 3 bevat, kunt u het declaratietype wijzigen in unsigned. Als het veld is bedoeld voor het opslaan van waarden in het bereik -4 3, kunt u de grootte van het bitveld wijzigen in 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.
}