Compiler Warning (level 4) C4463
tumpah; menetapkan nilai ke bit-field yang hanya dapat menyimpan nilai dari low_value ke high_value
Nilai yang ditetapkan berada di luar rentang nilai yang dapat ditahan oleh bit-field. Jenis bit-field yang ditandatangani menggunakan bit berurutan tinggi untuk tanda, jadi jika n adalah ukuran bit-field, rentang untuk bit-field yang ditandatangani adalah -2n-1 hingga 2n-1-1, sementara bit-field yang tidak ditandatangani memiliki rentang dari 0 hingga 2n-1.
Contoh
Contoh ini menghasilkan C4463 karena mencoba menetapkan nilai 3 ke bidang bit jenis int
dengan ukuran 2, yang memiliki rentang dari -2 hingga 1.
Untuk memperbaiki masalah ini, Anda dapat mengubah nilai yang ditetapkan menjadi sesuatu dalam rentang yang diizinkan. Jika bit-field dimaksudkan untuk menyimpan nilai yang tidak ditandatangani dalam rentang dari 0 hingga 3, Anda dapat mengubah jenis deklarasi menjadi unsigned
. Jika bidang dimaksudkan untuk menyimpan nilai dalam rentang -4 hingga 3, maka Anda dapat mengubah ukuran bit-field menjadi 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.
}