Rumah > pembangunan bahagian belakang > C++ > Mengapa Stringifikasi Menghasilkan 'foo' dalam Satu Kes dan '4' dalam Kes Lain?

Mengapa Stringifikasi Menghasilkan 'foo' dalam Satu Kes dan '4' dalam Kes Lain?

Linda Hamilton
Lepaskan: 2024-12-24 04:20:10
asal
904 orang telah melayarinya

Why Does Stringification Produce

Stringifikasi Terurai: Penjelasan Langkah demi Langkah

Stringifikasi ialah teknik makro berkuasa yang menukarkan token yang diberikan kepada literal rentetan. Untuk memahami selok-beloknya, mari kita periksa senario berikut:

define foo 4

define str(s) #s

Dengan str(foo), output yang dijangkakan ialah " foo" kerana rentetan dipercayai berlaku sebelum pengembangan teks. Walau bagaimanapun, dalam contoh kedua:

takrifkan xstr(s) str(s)

takrifkan str(s) #s

takrifkan foo 4

Keluaran xstr(foo) menjadi "4." Untuk membongkar percanggahan ini, kami menyelidiki langkah khusus yang terlibat dalam pengembangan makro:

  1. Arahan Prapemprosesan: Makro yang bermula dengan # atau ## diproses terlebih dahulu.
  2. Penggantian Argumen: Argumen dalam makro digantikan dengan yang sepadan nilai.
  3. Penggantian Parameter: Parameter digantikan dengan nilai argumen masing-masing.
  4. Mengimbas semula untuk Makro: Teks yang terhasil diimbas semula untuk makro tambahan .

Menggunakan langkah-langkah ini untuk xstr(foo):

  1. Tiada apa-apa yang berlaku kerana str(s) tidak mengandungi # atau ##.
  2. foo digantikan dengan 4, menghasilkan xstr(4).
  3. Dalam str(s), s digantikan dengan 4, menjana str(4).
  4. str(4) diimbas semula, menghasilkan output akhir "4."

Sekarang, mari kita periksa str(foo):

  1. Hujah foo masih foo (tidak digantikan dengan 4).
  2. Teks gantian, #s, menghasilkan "foo."

Inti isu terletak pada urutan pelaksanaan. Dalam langkah 1, apabila str(foo) dinilai, foo belum lagi digantikan dengan 4. Oleh itu, langkah rentetan menghasilkan "foo."

Oleh itu, penggunaan makro pembantu seperti xstr membenarkan perlaksanaan langkah 2 dan 1 yang berasingan, akhirnya memberikan gelagat rentetan yang diingini.

Atas ialah kandungan terperinci Mengapa Stringifikasi Menghasilkan 'foo' dalam Satu Kes dan '4' dalam Kes Lain?. 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