Rumah > pembangunan bahagian belakang > C++ > Bolehkah Penyata \'jika\' C Mengendalikan Perisytiharan Berbilang Pembolehubah?

Bolehkah Penyata \'jika\' C Mengendalikan Perisytiharan Berbilang Pembolehubah?

Patricia Arquette
Lepaskan: 2024-11-27 17:58:14
asal
790 orang telah melayarinya

Can C  's

Pengisytiharan Pembolehubah dalam Ungkapan "jika": Piawaian dan Keanehan Pengkompil

Masalahnya

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

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.

Penghadan

Walaupun peruntukan senyap standard, banyak penyusun, termasuk VS2008, menguatkuasakan pengehadan:

  • Kurungan tidak boleh disertakan pengisytiharan.
  • Hanya satu pengisytiharan dibenarkan bagi setiap syarat.

Contoh yang Lebih Menjengkelkan

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

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.

Kesimpulannya

Sebelum C 17, sintaks yang dikehendaki untuk berbilang deklarasi pembolehubah dalam "jika "Keadaan tidak selaras dengan piawaian. Walau bagaimanapun, penyusun sering mengenakan pengehadan lanjut.

Penyelesaian C 17

Syukurlah, C 17 memperkenalkan sintaks baharu yang menyelesaikan isu ini:

if (int a = Func1(), b = Func2(); a && b) { ... }
Salin selepas log masuk

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!

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