Rumah >pembangunan bahagian belakang >C++ >Bolehkah Penyata \'jika\' C Mengendalikan Perisytiharan Berbilang Pembolehubah?
Dalam C , pengisytiharan berubah dalam keadaan pernyataan "jika" mempunyai menjadi subjek kekeliruan dan batasan penyusun. Coretan kod seperti berikut sering menimbulkan persoalan:
if (int a = Func1()) { ... } // Works if ((int a = Func1())) { ... } // Fails to compile if ((int a = Func1()) && (int b = Func2())) { ... } // Works
Piawaian C 03 membenarkan pengisytiharan berubah-ubah dalam keadaan "jika", dengan skop meluas ke penghujung subpenyata dikawal oleh syarat tersebut. Walau bagaimanapun, ia tidak menyatakan sekatan pada kurungan atau berbilang pengisytiharan.
Walaupun peruntukan senyap standard, banyak penyusun, termasuk VS2008, menguatkuasakan pengehadan:
Penghadan ini boleh menjadi sangat menjengkelkan apabila mengisytiharkan berbilang pembolehubah dalam keadaan dan menetapkan nilai khusus kepada mereka. Pertimbangkan:
bool a = false, b = true; if (bool x = a || b) { ... }
Untuk memasukkan kandungan "jika" dengan x ditetapkan kepada palsu, kurungan diperlukan di sekeliling pengisytiharan. Walau bagaimanapun, memandangkan kurungan tidak dibenarkan, x mesti diisytiharkan di luar kandungan, membocorkannya ke skop yang lebih luas.
Sebelum C 17, sintaks yang dikehendaki untuk berbilang deklarasi pembolehubah dalam "jika "Keadaan tidak selaras dengan piawaian. Walau bagaimanapun, penyusun sering mengenakan pengehadan lanjut.
Syukurlah, C 17 memperkenalkan sintaks baharu yang menyelesaikan isu ini:
if (int a = Func1(), b = Func2(); a && b) { ... }
Dalam C 17, anda kini boleh menggunakan koma bertitik untuk memisahkan pengisytiharan daripada keadaan sebenar, membenarkan pengisytiharan berbilang pembolehubah dan kurungan.
Atas ialah kandungan terperinci Bolehkah Penyata \'jika\' C Mengendalikan Perisytiharan Berbilang Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!