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 unsigned
değ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.
}
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin