Un argomento è macro-sostituita prima di essere sostituito nella lista di sostituzione, tranne dove appare come operando di #
(stringize) o ##
(concatenate).
Nella macro h
, il parametro a
non è un argomento di uno di questi due operatori, quindi l'argomento viene sostituito dalla macro e quindi sostituito nell'elenco di sostituzione. Cioè, l'argomento è f(1,2)
macro sostituito diventare 1##2
, e poi a 12
, e poi viene sostituito in g(12)
, che è (ancora) macro-sostituito diventare "12"
.
Quando si richiama g
direttamente, il parametro a
è un argomento dell'operatore #
, quindi il suo argomento non è macro-sostituite prima subsitution: f(1,2)
viene sostituito direttamente nella lista di sostituzione, ottenendo "f(1,2)"
.
fonte
2012-01-06 07:21:02
Questo non è tecnicamente corretto. L'argomento sarebbe solo una sostituzione testuale se è concatenata o concatenata nella macro. – Pubby
Non sono sicuro di capirti. 'cpp' è solo un sistema di riscrittura testuale. –
Se le macro usano rigorosamente la sostituzione testuale allora 'h (f (1,2))' dovrebbe espandersi in '" f (1,2) "' – Pubby