Megosztás a következőn keresztül:


Fordító figyelmeztetése (4. szint) C4463

túlcsordulás; olyan érték hozzárendelése bitmezőhöz, amely csak a low_value és high_value közötti értékeket tudja tárolni

Megjegyzések

A hozzárendelt érték azon értékek tartományán kívül esik, amelyeket a bitmező tárolhat. Az aláírt bitmezőtípusok a nagy értékű bitet használják az előjelhez, így ha n a bitmező mérete, az aláírt bitmezők tartománya -2n-1 és 2n-1-1, míg az aláíratlan bitmezők tartománya 0 és 2n-1 között van.

Example

Ez a példa azért hozza létre a C4463-at, mert egy 3 értékű értéket próbál hozzárendelni egy 2-es méretű bitmezőhöz int , amelynek tartománya -2 és 1 között van.

A probléma megoldásához módosíthatja a hozzárendelt értéket az engedélyezett tartományban lévő értékre. Ha a bitmező a 0 és 3 közötti tartományba eső nem előjeles értékeket szeretné tárolni, a deklaráció típusát unsigned módosíthatja. Ha a mező célja az értékek tárolása -4 és 3 között, akkor a bitmező méretét 3-ra módosíthatja.

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