Condividi tramite


Avviso del compilatore (livello 4) C4463

traboccare; assegnazione di valore a un campo di bit che può contenere solo valori da low_value a high_value

Il valore assegnato non rientra nell'intervallo di valori che il campo di bit può contenere. I tipi di campo di bit con segno usano il bit di ordine elevato per il segno, quindi se n è la dimensione del campo di bit, l'intervallo per i campi di bit firmati è compreso tra -2n-1 e 2n-1-1, mentre i campi di bit senza segno hanno un intervallo compreso tra 0 e 2n-1.

Esempio

Questo esempio genera l'errore C4463 perché tenta di assegnare un valore pari a 3 a un campo di bit di tipo int con una dimensione pari a 2, che ha un intervallo compreso tra -2 e 1.

Per risolvere questo problema, è possibile modificare il valore assegnato in un valore compreso nell'intervallo consentito. Se il campo di bit deve contenere valori senza segno nell'intervallo compreso tra 0 e 3, è possibile modificare il tipo di dichiarazione in unsigned. Se il campo deve contenere valori compresi tra -4 e 3, è possibile modificare le dimensioni del campo di bit su 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.
}