weil ## ist ein Token-Verkettungsoperator für den c-Präprozessor.
Oder vielleicht verstehe ich die Frage nicht.
##
ist Token-Einfügen-Operator
Der Doppelzeichen- oder "Token-Pasting" -Operator (##), der manchmal "Merging" -Operator genannt wird, wird sowohl in objektartigen als auch in funktionsähnlichen Makros verwendet. Es ermöglicht, dass separate Token zu einem einzelnen Token zusammengefügt werden und daher nicht das erste oder letzte Token in der Makrodefinition sein können.
Wenn ein Formalparameter in einer Makrodefinition dem Token-Pasting-Operator vorangestellt oder gefolgt wird, wird der Formalparameter sofort durch das nicht erweiterte tatsächliche Argument ersetzt. Die Makroerweiterung wird für das Argument vor dem Ersetzen nicht ausgeführt.
#define f(g,g2) g##g2
## wird verwendet, um zwei Makros in c-Präprozessor zu verketten. Also vor dem Kompilieren sollte f (var, 12) durch den Präprozessor mit var12 ersetzt werden und daher haben Sie die Ausgabe erhalten.
Tags und Links c c-preprocessor stringification