Como mencioné en muchas de mis preguntas anteriores, estoy trabajando con K&R y actualmente estoy en el preprocesador. Una de las cosas más interesantes, algo que nunca supe antes de mis intentos anteriores de aprender C, es el ##
operador del preprocesador. Según K&R:
El operador del preprocesador
##
proporciona una forma de concatenar argumentos reales durante la expansión de macros. Si un parámetro en el texto de reemplazo es adyacente a a##
, el parámetro se reemplaza por el argumento real, el##
espacio en blanco y los alrededores se eliminan y el resultado se vuelve a escanear. Por ejemplo, la macropaste
concatena sus dos argumentos:
#define paste(front, back) front ## back
entonces
paste(name, 1)
crea el tokenname1
.
¿Cómo y por qué alguien usaría esto en el mundo real? ¿Cuáles son ejemplos prácticos de su uso y hay trampas a considerar?
std::wstring BuildDate = WIDEN(__DATE__) L" " WIDEN(__TIME__);
y construir implícitamente toda la cadena a la vez.