Compartir a través de


Advertencia del compilador (nivel 4) C4463

desbordamiento; se asigna value a un campo de bits que solo puede contener valores de low_value a high_value

El valor value asignado está fuera del intervalo de valores que el campo de bits puede contener. Los tipos de campo de bits con signo usan el bit de orden superior para el signo, por lo que si n es el tamaño del campo de bits, el intervalo para los campos de bits con signo es -2n-1 a 2n-1-1, mientras que los campos de bits sin signo tienen un intervalo de 0 a 2n-1.

Ejemplo

Este ejemplo genera la advertencia C4463, porque intenta asignar un valor de 3 a un campo de bits de tipo int con un tamaño de 2, que tiene un intervalo de -2 a 1.

Para corregir este problema, puede cambiar el valor asignado a alguno del intervalo permitido. Si el campo de bits está pensado para contener valores sin signo en el intervalo de 0 a 3, puede cambiar el tipo de declaración a unsigned. Si el campo está pensado para contener valores en el intervalo de -4 a 3, puede cambiar el tamaño del campo de bits a 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.
}