Partager via


Avertissement du compilateur (niveau 4) C4463

Débordement; affectation de valeur à un champ de bits qui ne peut contenir que des valeurs de low_value à high_value

La valeur affectée est en dehors de la plage de valeurs que le champ bit peut contenir. Les types de champs binaires signés utilisent le bit d’ordre élevé pour le signe. Par conséquent, si n est la taille du champ bit, la plage pour les champs binaires signés est de -2n-1 à 2n-1-1, tandis que les champs bits non signés ont une plage comprise entre 0 et 2n-1.

Exemple

Cet exemple génère l’erreur C4463, car il tente d’affecter une valeur de 3 à un champ de bits de type int avec une taille de 2, dont la plage est comprise entre -2 et 1.

Pour résoudre ce problème, vous pouvez modifier la valeur affectée par quelque chose dans la plage autorisée. Si le champ de bits est destiné à contenir des valeurs non signées dans la plage comprise entre 0 et 3, vous pouvez modifier le type unsignedde déclaration en . Si le champ est destiné à contenir des valeurs comprises entre -4 et 3, vous pouvez modifier la taille du champ binaire sur 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.
}