Rumah >pembangunan bahagian belakang >C++ >Bolehkah Penyata C `if` Mengisytiharkan Pembolehubah Dalam Keadaannya?

Bolehkah Penyata C `if` Mengisytiharkan Pembolehubah Dalam Keadaannya?

Barbara Streisand
Barbara Streisandasal
2024-11-27 19:57:13650semak imbas

Can C   `if` Statements Declare Variables Within Their Conditions?

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!

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