Share via


Derleyici Uyarısı (düzey 4) C4463

Taşma; yalnızca low_value high_value değerleri tutabilen bit alanına değer atama

Atanan değer , bit alanının tutabileceği değer aralığının dışında. İmzalı bit alanı türleri, işaret için yüksek sıralı bit kullanır, dolayısıyla n bit alanı boyutuysa, imzalı bit alanları aralığı -2n-1 ile 2n-1-1 arasında olurken, imzasız bit alanları 0 ile 2n-1 arasında bir aralığa sahiptir.

Örnek

Bu örnek C4463 oluşturur çünkü -2 ile 1 arasında bir aralığı olan 2 boyutundaki bit alanına int 3 değerini atamaya çalışır.

Bu sorunu düzeltmek için atanan değeri izin verilen aralıktaki bir değerle değiştirebilirsiniz. Bit alanı 0 ile 3 arasında imzalanmamış değerleri barındırmak için tasarlandıysa, bildirim türünü olarak unsigneddeğiştirebilirsiniz. Alanın -4 ile 3 aralığındaki değerleri tutması amaçlanıyorsa, bit alanı boyutunu 3 olarak değiştirebilirsiniz.

// 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.
}