Avertissement du compilateur (niveau 4) C4463
déborder; 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 unsigned
de 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.
}