Rumah > pembangunan bahagian belakang > C++ > Mengapakah `xstr(foo)` Output '4' Manakala `str(foo)` Output 'foo' dalam Pengembangan Makro seperti C?

Mengapakah `xstr(foo)` Output '4' Manakala `str(foo)` Output 'foo' dalam Pengembangan Makro seperti C?

Linda Hamilton
Lepaskan: 2024-12-28 14:30:11
asal
207 orang telah melayarinya

Why Does `xstr(foo)` Output

Memahami Stringifikasi: Langkah Utama Pengembangan Makro

Konsep rentetan dalam bahasa seperti C membolehkan anda menukar ungkapan kepada rentetan. Memahami langkah-langkah yang terlibat dalam proses ini adalah penting untuk penggunaan makro yang berkesan.

Masalah: Perbezaan dalam Output

Pertimbangkan definisi makro berikut:

#define foo 4
#define str(s) #s
Salin selepas log masuk

Apabila anda menggunakan str(foo) dalam kod anda, ia akan mengeluarkan "foo" kerana rentetan (langkah 1) dilakukan sebelum pengembangan teks (langkah 2).

Walau bagaimanapun, jika anda mentakrifkan makro tambahan:

#define xstr(s) str(s)
Salin selepas log masuk

Dan gunakan xstr(foo), outputnya akan menjadi "4". Perbezaan ini memerlukan penerokaan proses rentetan.

Langkah-langkah Pengembangan Makro

Proses pengembangan makro melibatkan beberapa langkah, mengikut piawaian C dan C:

  1. Praproses: Token didahului oleh # atau ## adalah diproses.
  2. Penggantian Argumen: Makro digunakan pada setiap hujah.
  3. Penggantian Parameter: Parameter digantikan dengan hasil makro yang sepadan.
  4. Pengimbasan semula: Kod diimbas semula untuk makro selanjutnya pengembangan.

Menggunakan Langkah untuk xstr(foo)

  1. Praproses: Tiada token yang berkenaan.
  2. Penggantian Hujah: foo digantikan dengan 4.
  3. Penggantian Parameter: Dalam str(s), s digantikan dengan 4, menghasilkan str(4).
  4. Pengimbasan semula: str (4) diimbas semula, menghasilkan output "4".

Mengapa str(foo) Menghasilkan "foo"

Berbeza dengan xstr(foo), str(foo) menghasilkan "foo" kerana:

  • Praproses: Tiada rentetan token hadir.
  • Penggantian Hujah: Tiada yang berkenaan.
  • Penggantian Parameter: #foo kekal tidak berubah kerana foo belum digantikan dengan 4.
  • Mengimbas semula: #foo tidak diimbas semula, menghasilkan "foo".

Oleh itu, penggunaan makro pembantu seperti xstr memastikan pengembangan teks (langkah 2) dilakukan sebelum rentetan (langkah 1), membenarkan penukaran rentetan yang betul .

Atas ialah kandungan terperinci Mengapakah `xstr(foo)` Output '4' Manakala `str(foo)` Output 'foo' dalam Pengembangan Makro seperti C?. 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