Seperti yang disebutkan dalam banyak pertanyaan saya sebelumnya, saya sedang mengerjakan K&R, dan saat ini sedang dalam preprocessor. Salah satu hal yang lebih menarik - sesuatu yang tidak pernah saya ketahui sebelumnya dari upaya saya sebelumnya untuk mempelajari C - adalah ##
operator preprocessor. Menurut K&R:
Operator preprocessor
##
menyediakan cara untuk menggabungkan argumen aktual selama ekspansi makro. Jika parameter dalam teks pengganti bersebelahan dengan a##
, parameter tersebut diganti dengan argumen aktual,##
spasi putih di sekitarnya akan dihapus, dan hasilnya dipindai ulang. Misalnya, makropaste
menggabungkan dua argumennya:
#define paste(front, back) front ## back
jadi
paste(name, 1)
buat tokennyaname1
.
Bagaimana dan mengapa seseorang menggunakan ini di dunia nyata? Apa contoh praktis penggunaannya, dan adakah hal-hal yang perlu dipertimbangkan?
std::wstring BuildDate = WIDEN(__DATE__) L" " WIDEN(__TIME__);
dan secara implisit membangun seluruh string sekaligus.