#define macht nichts anderes als Textersetzungen.
Du gibst den Ausgangstext an (der Makro-Name) und der Rest der Zeile ist
der Text, der anstelle dieses Textes eingesetzt werden soll.
Im grunde nichts anderes als 'Suchen und Ersetzen' in deinem Texteditor.
Dh. du hast in der Verwendung zb die Zeile
i = A(5);
und du möchtest dass der COmpiler eigentlich dieses hier zu Gesicht
bekommt:
i = call_func( foo( 5 ) );
was muss passieren, damit eine Textersetzung das leistet? Der Text 'A(
irgendwas )' muss durch 'call_func( foo ( irgendwas ) )' ersetzt werden.
Oder eben in Präprozessor Schreibweise:
#define A(x) call_func( foo( x ) )
Wenn du also ein Makro schreiben willst, dann überleg dir, was letzten
Endes nach der Textersetzung rauskommen soll. Das leitet dich dann
dahingehend, wie das Makro zu schreiben ist.