Mein mentales Modell, wie der Präprozessor funktioniert, ist anscheinend unvollständig, und das macht mich verrückt.Präprozessor Token Erweiterung
Ich möchte zwei Tokens verketten, aber das zweite Token sollte zuerst erweitert werden.
#define ANSWER 42
#define FOO foo_ ## ANSWER
Hier erweitert FOO
-foo_ANSWER
, aber ich will es foo_42
sein. So definiere ich einen MERGE
Makro in der Hoffnung, dass dies irgendwie die Argumente vor Verkettung erweitern würde:
#define MERGE(x, y) x ## y
#define BAR MERGE(bar_, ANSWER)
Aber BAR
noch bar_ANSWER
erweitert statt bar_42
. So definiere ich ein anderes Makro HELPER
:
#define HELPER(x, y) MERGE(x, y)
#define BAZ HELPER(baz_, ANSWER)
Und jetzt BAZ
erfolgreich zu baz_42
erweitert. Im Moment scheint das für mich wie Magie zu sein.
Kann mir jemand dieses Verhalten erklären? Wie funktionieren die Erweiterungsregeln genau?
Es tut mir leid zu sagen, dass ich auch eine mögliche doppelte Frage des gleichen Problems gemacht hatte. Ich frage mich, warum dieses Verhalten nicht eindeutig dokumentiert ist. Ich meine den Algorithmus, den Präprozessor betreibt. –
@sandundhammika: Es ist ziemlich genau in der Spezifikation dokumentiert - Abschnitt 6.10.3 - obwohl es eine Reihe von undefinierten Verhaltensecken gibt. –