Share via


Upozornění kompilátoru (úroveň 4) C4463

Přetečení; přiřazení hodnoty k bitovému poli, které může obsahovat pouze hodnoty z low_value do high_value

Přiřazená hodnota je mimo rozsah hodnot, které může bitové pole obsahovat. Typy podepsaných bitových polí používají bit s vysokým pořadím pro znaménko, takže pokud n je velikost bitového pole, rozsah podepsaných bitových polí je -2n-1 až 2n-1, zatímco nepodepsaná bitová pole mají rozsah od 0 do 2n-1.

Příklad

Tento příklad vygeneruje C4463, protože se pokusí přiřadit hodnotu 3 k bitovým polím typu int s velikostí 2, která má rozsah od -2 do 1.

Pokud chcete tento problém vyřešit, můžete změnit přiřazenou hodnotu na něco v povoleném rozsahu. Pokud má bitové pole obsahovat nepodepsané hodnoty v rozsahu od 0 do 3, můžete typ deklarace změnit na unsigned. Pokud má pole obsahovat hodnoty v rozsahu -4 až 3, můžete velikost bitového pole změnit na 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.
}