Apakah C \'Paling Menjengkelkan Parse\' dan Bagaimana Ia Mengelirukan Perisytiharan Fungsi?

Barbara Streisand
Lepaskan: 2024-11-24 13:22:12
asal
481 orang telah melayarinya

What's C  's

C's Most Vixing Parse

Dalam C , cara coretan kod dihuraikan boleh membawa kepada tingkah laku yang tidak dijangka. Satu contoh yang terkenal dikenali sebagai "penghuraian paling menjengkelkan."

Enigma Perisytiharan Fungsi

Pertimbangkan kod berikut:

widget w(gadget(), doodad());
Salin selepas log masuk

Pada pandangan pertama, nampaknya mengisytiharkan pembolehubah bernama w jenis widget. Walau bagaimanapun, kod ini sebenarnya mentakrifkan fungsi bernama w yang mengambil dua argumen.

Peluruhan Argumen dan Hantaran Penunjuk

Dalam pengisytiharan fungsi, argumen jenis tatasusunan mereput menjadi penunjuk kepada elemen pertama, dan argumen jenis fungsi mereput menjadi penunjuk fungsi. Oleh itu, pengisytiharan setara w ialah:

widget w(gadget(*)(), doodad(*)());
Salin selepas log masuk

Ini bermakna fungsi w mengambil sebagai hujah pertamanya penunjuk kepada fungsi yang tidak mengambil hujah dan mengembalikan alat. Ia juga memerlukan hujah kedua, penunjuk kepada fungsi yang tidak mengambil hujah dan mengembalikan doodad. Fungsi itu sendiri mengembalikan widget.

Kerumitan Tambahan

"Huraian yang paling menjengkelkan" menjadi lebih mengelirukan dalam kes seperti berikut:

widget w(gadget(x));
Salin selepas log masuk

Jika x sudah menjadi pembolehubah, bagaimanakah ini boleh ditafsirkan sebagai pengisytiharan fungsi? Jawapannya terletak pada fakta bahawa dalam C , anda boleh menggunakan kurungan tambahan apabila mengisytiharkan pembolehubah. Oleh itu, alat x; dan alat (x); kedua-duanya mengisytiharkan pembolehubah yang sama bernama x. Oleh itu, kod di atas ialah pengisytiharan fungsi yang mengambil hujah pertama jenis alat bernama x dan mengembalikan widget.

Atas ialah kandungan terperinci Apakah C \'Paling Menjengkelkan Parse\' dan Bagaimana Ia Mengelirukan Perisytiharan Fungsi?. 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