logo

#- und ##-Operatoren in C

Stringisierungsoperator (#)

Der Stringisierungsoperator (#) ist ein Präprozessoroperator, der bewirkt, dass das entsprechende tatsächliche Argument eingeschlossen wird doppelte Anführungszeichen. Der #-Operator, der im Allgemeinen als „#“ bezeichnet wird stringisieren Operator, wandelt das vorangehende Argument in a um Zeichenfolge in Anführungszeichen . Er wird auch als Stringifizierungsoperator bezeichnet.

Es wird im Allgemeinen mit Makros in C verwendet.



Schreiben Sie JSON in die Python-Datei

Beispiel

Der folgende C-Code demonstriert die Verwendung des Stringisierungsoperators (#).

C








>

myflixer
>

Ausgabe

geeksforgeeks>

Erläuterung

Der folgende Präprozessor verwandelt die Zeile printf(mkstr(geeksforgeeks)); in printf(geeksforgeeks);

Token-Einfügungsoperator (##)

Der Token-Einfügungsoperator (##) Ermöglicht die Verkettung von Token, die als tatsächliche Argumente verwendet werden, um andere Token zu bilden. Beim Erweitern von Makros ist es oft sinnvoll, zwei Token zu einem zusammenzuführen. Dies wird als Token-Einfügen oder Token-Verkettung bezeichnet.

Der Vorverarbeitungsoperator „##“ führt das Einfügen von Token durch. Wenn ein Makro erweitert wird, werden die beiden Token auf beiden Seiten jedes „##“-Operators zu einem einzigen Token kombiniert, der dann das „##“ und die beiden ursprünglichen Token in der Makroerweiterung ersetzt.

Beispiele

Der folgende C-Code demonstriert die Verwendung des Token-Pasting-Operators (##).

C




// C program to illustrate (##) operator> #include> > // Macro definition using the Token-pasting operator> #define concat(a, b) a##b> int> main(>void>)> {> >int> xy = 30;> > >// Printing the concatenated value of x and y> >printf>(>'%d'>, concat(x, y));> >return> 0;> }>

ASCII-Tabelle Java

>

tun, während in Java
>

Ausgabe

30>

Erläuterung

Der Präprozessor transformiert printf(%d, concat(x, y)); into printf(%d, xy);

Anwendung des Token-Pasting-Operators (##)

Das ## bietet eine Möglichkeit, tatsächliche Argumente während der Makroerweiterung zu verketten. Wenn ein Parameter im Ersetzungstext an ein ## angrenzt, wird der Parameter durch das tatsächliche Argument ersetzt, das ## und das umgebende Leerzeichen werden entfernt und das Ergebnis wird erneut gescannt.