Adakah standard C membenarkan bool yang tidak dimulakan untuk ranap program?
Ya, ISO C membenarkan (tetapi tidak' t memerlukan) pelaksanaan untuk membuat pilihan ini.
ISO C menyatakan bahawa bool hanya boleh mempunyai dua kemungkinan nilai: benar atau salah. Walau bagaimanapun, ia tidak menyatakan bagaimana nilai ini diwakili dalam ingatan. Ini diserahkan kepada pelaksanaan.
Satu pelaksanaan biasa ialah menggunakan bit tunggal untuk mewakili bool, dengan 0 mewakili palsu dan 1 mewakili benar. Perwakilan ini digunakan oleh banyak pengkompil C, termasuk Clang dan GCC.
Walau bagaimanapun, sesetengah penyusun boleh memilih untuk menggunakan perwakilan yang berbeza untuk bool. Sebagai contoh, pengkompil Microsoft Visual C menggunakan integer 32-bit untuk mewakili bool, dengan 0 mewakili palsu dan nilai bukan sifar mewakili benar.
Jika pengkompil menggunakan perwakilan bukan standard untuk bool, mungkin bool yang tidak dimulakan untuk ranap program. Ini boleh berlaku jika pengkompil menganggap bahawa bool mempunyai nilai tertentu (seperti 0 atau 1) dan menggunakan nilai tersebut dalam operasi yang tidak sah untuk bool yang tidak diinisialisasi.
Sebagai contoh, pertimbangkan kod berikut :
bool b; if (b) { // Do something }
Jika pengkompil menganggap bahawa b mempunyai nilai 0 (salah), ia mungkin menjana kod yang melompat ke blok "Lakukan sesuatu" walaupun b sebenarnya tidak dimulakan. Ini boleh menyebabkan ranap sistem.
Untuk mengelakkan masalah ini, adalah penting untuk sentiasa memulakan pembolehubah bool sebelum menggunakannya. Ini boleh dilakukan dengan menggunakan pembina lalai:
bool b = false;
Sebagai alternatif, anda boleh menggunakan operator ternary untuk menetapkan nilai b berdasarkan syarat:
bool b = (condition) ? true : false;
Atas ialah kandungan terperinci Bolehkah Pembolehubah Boolean Tidak Dimulakan Menghancurkan Program C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!