Rumah >pembangunan bahagian belakang >C++ >Apakah Parse C Paling Menjengkelkan dan Mengapa Ia Mentafsir `A a(A());` sebagai Pengisytiharan Fungsi?
Penghuraian Paling Menjengkelkan: Teka-teki dalam Sintaks C
Dalam dunia labirin sintaks C, satu teka-teki yang membingungkan menonjol: yang Paling Penghuraian Menjengkelkan (MVP). Keanehan sintaksis ini menimbulkan cabaran kepada pengaturcara, menyebabkan ramai yang bingung.
Inti MVP terletak pada tafsiran samar-samar sintaks tertentu:
A a( A() );
Baris yang membingungkan ini boleh ditafsirkan dalam dua bercanggah cara:
Anehnya, walaupun jangkaan pengaturcara yang lazim bahawa tafsiran pertama adalah betul, piawaian C mewajibkan tafsiran kedua. Ini menyebabkan ramai yang menggaru kepala, tertanya-tanya mengapa pilihan yang tidak dijangka dan berkemungkinan mengelirukan telah dibuat.
Untuk memahami rasional di sebalik MVP, mari kita pertimbangkan senario hipotetikal di mana ia tidak wujud. Dalam realiti alternatif ini, bagaimanakah fungsi diisytiharkan dalam C ?
A foo();
Malangnya, menggunakan sintaks ini menghasilkan takrifan berubah-ubah dan bukannya pengisytiharan kaedah. Untuk menampung pengisytiharan fungsi, kata kunci baharu atau sintaks yang janggal akan diperlukan.
Untuk mengelakkan kerumitan sedemikian, piawaian C memilih peraturan yang lebih mudah: "Semua yang boleh ditafsirkan sebagai pengisytiharan akan ditafsirkan sebagai pengisytiharan." Ini merangkumi kedua-dua definisi pembolehubah dan pengisytiharan fungsi. Oleh itu, sintaks
A a;
mentakrifkan pembolehubah, manakala
A a();
mengisytiharkan fungsi.
Mengguna pakai peraturan ini memastikan konsistensi dalam sintaks, menghapuskan keperluan untuk kes khas. Walaupun ini pada mulanya mungkin mengelirukan pengaturcara, ia akhirnya menggalakkan kejelasan dan konsistensi dalam bahasa.
Atas ialah kandungan terperinci Apakah Parse C Paling Menjengkelkan dan Mengapa Ia Mentafsir `A a(A());` sebagai Pengisytiharan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!