Pengisytiharan Pembolehubah dalam Ungkapan 'jika' dalam C
Dalam C , keupayaan untuk mengisytiharkan pembolehubah dalam keadaan pernyataan 'jika' telah menjadi subjek batasan. Penyusun, termasuk Visual Studio 2008, sering menghadapi kesukaran dengan pengisytiharan berubah-ubah yang disertakan dalam kurungan atau berbilang pengisytiharan dalam satu syarat.
Menurut Seksyen 6.4.3 piawai C 2003, pembolehubah yang diisytiharkan dalam pernyataan pemilihan mempunyai skop yang menjangkau ke penghujung subpenyataan yang dikawal oleh keadaan. Walau bagaimanapun, piawaian ini tidak secara eksplisit menangani penggunaan kurungan atau berbilang pengisytiharan.
Sebagai contoh, kod berikut gagal untuk disusun:
if((int a = Func1())) { // Fails to compile. }
Walaupun dalam kes di mana hanya satu pengisytiharan diperlukan , had ini boleh mengecewakan. Pertimbangkan perkara berikut:
bool a = false, b = true; if(bool x = a || b) { }
Untuk menetapkan 'x' kepada 'palsu' dalam skop 'if'-body, pengisytiharan memerlukan tanda kurungan. Walau bagaimanapun, kurungan tidak dibenarkan dalam keadaan, memaksa pengisytiharan 'x' di luar badan dan membocorkannya ke skop yang lebih luas.
Sehingga C 17, had tersebut telah ditangani. Kod berikut kini boleh dilakukan:
if (int a = Func1(), b = Func2(); a &&& b) { // Do stuff with a and b. }
Penggunaan ';' bukannya ',' memisahkan pengisytiharan daripada syarat, menyelesaikan had sebelumnya.
Atas ialah kandungan terperinci Bolehkah Penyata C `if` Mengisytiharkan Pembolehubah Dalam Keadaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!