Konkatenation ##

Das doppelte ## bewirkt eine Konkatenation der beiden Operanden links und rechts ohne zusätzlichen Abstand. Damit kann erreicht werden, dass beispielsweise der Parameter eines parametrisierten Makros zu einem neuen Namen zusammengefügt wird, wie im folgenden Beispiel, wo automatisch stets die Float-Variante der Mathematik-Funktion aufgerufen wird.

#include <stdio.h> #include <math.h> #define MATH(func, args) func ## f (args) int main(){ printf("floor(3.14) = %f\n", MATH(floor, 3.14)); return 0; }

floor(3.14) = 3.000000

Details

Obiges Beispiel wird folgendermassen übersetzt:

printf("floor(3.14) = %f\n", floorf (3.14));

Ist einer der Operanden links oder rechts ein Makro, so wird dieses NICHT aufgelöst. Folgende Zeilen werden also nicht wie gewünscht übersetzt:

#define SUFFIX f #define MATH(func, args) func ## SUFFIX (args) MATH(floor, 3.14);

floorSUFFIX (3.14);

Eine Spezial-Bedeutung des doppelten Sharp-Zeichens ## findet sich bei GCC für variadische Makros.