Bagikan melalui


Compiler Warning (level 1 dan level 4) C4700

variabel lokal yang tidak diinisialisasi 'nama' digunakan

Keterangan

Nama variabel lokal telah digunakan, yaitu, baca dari, sebelum ditetapkan nilai. Di C dan C++, variabel lokal tidak diinisialisasi secara default. Variabel yang tidak diinisialisasi dapat berisi nilai apa pun, dan penggunaannya menyebabkan perilaku yang tidak terdefinisi. Peringatan C4700 hampir selalu menunjukkan bug yang dapat menyebabkan hasil yang tidak dapat diprediksi atau crash dalam program Anda.

Untuk memperbaiki masalah ini, Anda dapat menginisialisasi variabel lokal saat dinyatakan, atau menetapkan nilai sebelum digunakan. Fungsi dapat digunakan untuk menginisialisasi variabel yang diteruskan sebagai parameter referensi, atau ketika alamatnya diteruskan sebagai parameter penunjuk.

/sdl Opsi kompilator (Aktifkan Pemeriksaan Keamanan Tambahan) meningkatkan peringatan ini menjadi kesalahan.

Contoh

Sampel ini menghasilkan C4700 ketika variabel t, , udan v digunakan sebelum diinisialisasi, dan menunjukkan jenis nilai sampah yang dapat dihasilkan. xVariabel , y, dan z tidak menyebabkan peringatan, karena diinisialisasi sebelum digunakan:

// c4700.cpp
// compile by using: cl /EHsc /W4 c4700.cpp
#include <iostream>

// function takes an int reference to initialize
void initialize(int& i)
{
    i = 21;
}

int main()
{
    int s, t, u, v;   // Danger, uninitialized variables

    s = t + u + v;    // C4700: t, u, v used before initialization
    std::cout << "Value in s: " << s << std::endl;

    int w, x;         // Danger, uninitialized variables
    initialize(x);    // fix: call function to init x before use
    int y{10};        // fix: initialize y, z when declared
    int z{11};        // This C++11 syntax is recommended over int z = 11;

    w = x + y + z;    // Okay, all values initialized before use
    std::cout << "Value in w: " << w << std::endl;
}

Ketika kode ini dijalankan, t, , dan v tidak diinisialisasi, dan output untuk s tidak dapat diprediksiu:

Value in s: 37816963
Value in w: 42