Konkatenation ##
Das doppelte ## ist ein Makro-Operator, der eine Konkatenation der beiden Operanden links und rechts ohne zusätzlichen Abstand bewirkt. Dadurch wird aus zwei Symbolen eines, weswegen dieser Makro-Operator auch Symboloperator
und im Englischen als Tokenizer
bezeichnet wird. Im folgenden Beispiel wird automatisch die Float-Variante der übergebenen Mathematik-Funktion aufgerufen:
|
|
Details
Obige Zeile wird folgendermassen übersetzt:
|
|
Ist einer der Operanden links oder rechts ein Makro, so wird dieses grundsätzlich NICHT aufgelöst. Die einzige Ausnahme zu dieser Regel ist das __VA_ARGS__ Makro, welches korrekt ausgewertet wird. Folgende Zeilen illustrieren dies:
|
|
Als Operanden sind beliebige Preprozessor-Tokens erlaubt, solange die Zusammensetzung wiederum ein gültiges Preprozessor-Token ergibt. Wird versucht, dieser Makro-Operator ausserhalb einer #define-Direktive im Code zu verwenden, so wird der Compiler einen Fehler melden.
Eine Spezial-Bedeutung des doppelten Hash-Zeichens ## findet sich bei GCC für variadische Makros.