En xcat (x, y), las xey no están adyacentes al operador ##, y por lo que se someten a una expansión macro antes de ser sustituidas.
Así que x se identifica como xcat (1,2) e y se identifica como 3. Pero antes para la sustitución, x se expande macro a cat (1,2), que se convierte en 1 ## 2 que se convierte en 12. por lo tanto, en última instancia, xcat (xcat (1,2), 3) se expandirá al gato (12,3), que va a salir 123.
Esto funciona -> gato (xcat (1 , 2), 3) -> cat (cat (1,2), 3) -> cat (12,3)
El comportamiento está bien definido porque todos los tokens resultan válidos tokens de preprocesador es decir, cualquier xpression expandido debe ser un token válido en cualquier etapa.
¿Quiere decir 'entonces el resultado de xcat (xcat (1,2), 3) es ahora 123'? –
@notfed: Lo siento, cometí un error al escribir la pregunta. Sí, el resultado de xcat (xcat (1,2), 3) es 123 – sourabh912