Partilhar via


Aviso do compilador (nível 4) C4463

estouro; atribuir value ao campo de bits que só pode conter valores de low_value a high_value

O value atribuído está fora do intervalo de valores que o campo de bits pode conter. Os tipos de campo de bit assinado usam o bit de alta ordem para o sinal, portanto, se n for o tamanho do campo de bits, o intervalo para campos de bits assinados será -2n-1 a 2n-1-1, enquanto os campos de bits não assinados terão um intervalo de 0 a 2n-1.

Exemplo

Este exemplo gera C4463 porque ele tenta atribuir um valor de 3 a um campo de bits de tipo int com um tamanho de 2, que tem um intervalo de -2 a 1.

Para corrigir esse problema, você pode alterar o valor atribuído para algo no intervalo permitido. Se o campo de bits for destinado a manter valores não assinados no intervalo de 0 a 3, você poderá alterar o tipo de declaração para unsigned. Se o campo for destinado a manter valores no intervalo -4 a 3, você poderá alterar o tamanho do campo de bits para 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.
}