Rumah > pembangunan bahagian belakang > C++ > Bolehkah Pembolehubah Boolean Tidak Dimulakan Menghancurkan Program C?

Bolehkah Pembolehubah Boolean Tidak Dimulakan Menghancurkan Program C?

Susan Sarandon
Lepaskan: 2024-12-17 14:53:09
asal
403 orang telah melayarinya

Can an Uninitialized Boolean Variable Crash a C   Program?

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
}
Salin selepas log masuk

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;
Salin selepas log masuk

Sebagai alternatif, anda boleh menggunakan operator ternary untuk menetapkan nilai b berdasarkan syarat:

bool b = (condition) ? true : false;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan