Rumah > pembangunan bahagian belakang > C++ > Mengapa C Mentafsir 'A a(A());' sebagai Pengisytiharan Fungsi, Bukan Definisi Pembolehubah?

Mengapa C Mentafsir 'A a(A());' sebagai Pengisytiharan Fungsi, Bukan Definisi Pembolehubah?

Barbara Streisand
Lepaskan: 2024-12-24 12:44:10
asal
186 orang telah melayarinya

Why Does C   Interpret

Paradoks Penghuraian Paling Menjengkelkan: Kekaburan Penghuraian dalam C

Dalam C , "penghuraian yang paling menjengkelkan" merujuk kepada kekaburan sintaksis yang boleh membawa kepada tafsiran yang tidak dijangka terhadap binaan bahasa. Pertimbangkan coretan kod berikut:

A a( A() );
Salin selepas log masuk

Menurut piawaian C, coretan kod ini ditafsirkan sebagai pengisytiharan fungsi untuk a yang mengambil hujah tanpa nama yang mengembalikan objek jenis A. Walau bagaimanapun, ramai pengaturcara secara intuitif mengharapkan ia menjadi takrifan berubah bagi a yang mengambil contoh tanpa nama A.

Mengapa C standard menjadikan ini satu keperluan? Mari kita terokai rasionalnya:

  • Pengisytiharan Fungsi Konsisten: Dengan menganggap semua pengisytiharan samar-samar sebagai pengisytiharan fungsi, C mengekalkan konsistensi dengan sintaks untuk pengisytiharan fungsi yang lebih mudah, seperti A foo() ;. Ini memastikan tafsiran seragam merentas semua pengisytiharan fungsi.
  • Mengelakkan Terlalu Banyak Kata Kunci: Memperkenalkan kata kunci baharu untuk membezakan antara definisi pembolehubah dan pengisytiharan fungsi akan memperkenalkan kerumitan yang tidak perlu kepada bahasa.
  • Tafsiran Konsisten: Merawat perisytiharan yang tidak jelas sebagai pengisytiharan fungsi menghalang kekeliruan apabila kod dibaca secara berurutan. Ia memastikan bahawa satu binaan mempunyai tafsiran tunggal yang tidak jelas.
  • Preseden Sejarah: C mewarisi tingkah laku ini daripada pendahulunya, C, di mana pengisytiharan fungsi telah disimpulkan berdasarkan kehadiran kurungan selepas nama pembolehubah.

Ringkasnya, "paling menjengkelkan parse" wujud dalam C untuk memastikan pengisytiharan fungsi yang konsisten, mengelakkan kelebihan kata kunci, memudahkan tafsiran kod yang tidak jelas dan mengekalkan duluan sejarah. Walaupun ia mungkin membawa kepada hasil yang tidak dijangka dalam sesetengah kes, faedahnya mengatasi kelemahannya dalam mempromosikan bahasa pengaturcaraan yang jelas dan boleh diramal.

Atas ialah kandungan terperinci Mengapa C Mentafsir 'A a(A());' sebagai Pengisytiharan Fungsi, Bukan Definisi 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