In xcat (x, y), xey non sono adiacenti all'operatore ## e quindi subiscono l'espansione macro prima di essere sostituiti.
Quindi x è identificato come xcat (1,2) e y è identificato come 3. Ma prima di sostituzione, x è macro-espanso a cat (1,2), che si trasforma in 1 ## 2 cui si trasforma in 12. Quindi in ultima analisi, xcat (xcat (1,2), 3) si espanderà al gatto (12,3), che si rivelerà 123.
Questo funziona -> cat (xcat (1 , 2), 3) -> cat (cat (1,2), 3) -> cat (12,3)
Il comportamento è ben definito perché tutti gli invii di token risultano validi i token del preprocessore vale a dire qualsiasi xpression espansa dovrebbe essere un gettone valido in qualsiasi momento.
Vuoi dire 'allora il risultato di xcat (xcat (1,2), 3) è ora 123'? –
@notfed: Scusa ho commesso un errore nello scrivere la domanda. Sì il risultato di xcat (xcat (1,2), 3) è 123 – sourabh912