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

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

Patricia Arquette
Patricia Arquetteasal
2024-11-27 17:58:14780semak imbas

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

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) { ... }

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) { ... }

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!

Kenyataan:
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