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 antes supe de ninguno de mis intentos anteriores de aprender C — es el operador de preprocesador ##
. Según K & R:¿Cuáles son las aplicaciones del ## preprocessor operator y gotchas a considerar?
El preprocesador operador
##
proporciona una manera para concatenar reales argumentos durante la expansión macro. Si un parámetro en el texto de reemplazo es adyacente a un##
, el parámetro es reemplazado por el argumento real, el##
y que rodea el espacio en blanco se eliminan , y el resultado se vuelve a escanear. Por ejemplo, la macropaste
concatena sus dos argumentos:
#define paste(front, back) front ## back
por lo
paste(name, 1)
crea el tokenname1
.
¿Cómo y por qué alguien usaría esto en el mundo real? ¿Cuáles son los ejemplos prácticos de su uso y hay trampas que considerar?
Ya que se puede concatenar cadenas literales en tiempo de compilación, que podría reducir la expresión builddate a 'std :: wstring builddate = WIDEN (__DATE__) L "" WIDEN (__ TIME __); 'y construye implícitamente toda la cadena a la vez. – user666412