Was bedeutet ## für den C (C ++) Präprozessor?

7

Ich habe ein C Programm unten:

%Vor%

Wenn ich nur den Präprozessor ausführe, wird dies um

erweitert %Vor%

weshalb die Ausgabe 100 ist.

Kann mir jemand sagen, wie / warum der Präprozessor var##12 to var12 erweitert?

    
Vijay 08.01.2010, 06:17
quelle

4 Antworten

20

nichts zu ausgefallen: ## weist den Präprozessor an, die linke und rechte Seite zu verketten

siehe Ссылка

    
cobbal 08.01.2010, 06:19
quelle
4

weil ## ist ein Token-Verkettungsoperator für den c-Präprozessor.

Oder vielleicht verstehe ich die Frage nicht.

    
Stefano Borini 08.01.2010 06:19
quelle
3

## 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.

    
Prasoon Saurav 08.01.2010 06:21
quelle
1

#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.

    
SHANAVAS P 08.01.2010 09:23
quelle