Bagikan melalui


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