2016-05-16 13 views
1

Nehmen wir an, wir folgendes zu der gcc ‚s Präprozessor übergeben:Aufruf eines funktionsähnlichen Makros ohne Klammern?

#define REM(...) __VA_ARGS__ 
#define PAIR(x) REM x 

PAIR((a)b) 

Es erweitert PAIR((a)b) in a b. Wie kommt es dazu? Ich bin verwirrt über REM ohne Klammern verwendet und x nicht Echo wird wie ...

+2

Nach dem Ersetzen von 'PAIR ((a) b)' durch 'REM (a) b' geht der Präprozessor zum Anfang des ersetzten Textes zurück und scannt ihn als Folge von Token erneut. Ganz schön offensichtlich. –

Antwort

3

Wenn Sie schreiben:

PAIR((a)b) 

angesichts der Definition

PAIR(x) REM x 

das heißt x = (a)b. So können wir die rechte Seite als

REM (a)b 

rechts schreiben?

Jetzt REM(a) ist nur a, so REM (a)b ist nur a b (Token, die durch Leerzeichen getrennt werden, es sei denn Sie ausdrücklich token einfügen verwenden).

Verwandte Themen