Dalam bidang C dan C , istilah "stringifikasi" merujuk kepada penukaran argumen makro kepada literal rentetan . Walau bagaimanapun, prosesnya boleh menjadi rumit, seperti yang ditunjukkan oleh senario berikut:
#define foo 4 #define str(s) #s
Dalam kes ini, str(foo) mengeluarkan "foo" kerana proses rentetan (pengendali #) dilaksanakan sebelum makro pengembangan (arahan #define). Ini memastikan foo kekal sebagai nama makro dan tidak digantikan dengan nilainya.
Walau bagaimanapun, coretan kod berikut menghasilkan hasil yang berbeza:
#define xstr(s) str(s) #define str(s) #s #define foo 4
Dengan xstr(foo) dipanggil, output menjadi "4." Untuk memahami tingkah laku ini, kita mesti menyelidiki selok-belok pengembangan makro.
Mengikut piawaian C dan C, proses pengembangan makro memerlukan langkah berikut:
Dalam kes xstr(foo) :
Perbezaan utama di sini terletak pada langkah di mana argumen makro digantikan (langkah 2). Dengan str(foo) dalam contoh pertama, langkah 2 berlaku selepas rentetan telah digunakan dalam langkah 1. Oleh itu, foo tidak diganti dan output kekal "foo."
Untuk menangani isu ini, pembantu makro xstr digunakan. Dengan menyarangkan makro, kita boleh melakukan penggantian argumen dalam langkah 2 dahulu dan kemudian menggunakan rentetan dalam langkah 1, memastikan hasil yang diingini bagi "4" diperoleh.
Atas ialah kandungan terperinci Bagaimanakah Perintah Pengembangan Makro Mempengaruhi Stringifikasi dalam C dan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!