Stringifizierung #
Wird in einer parametrisierten Makrodefinition einem Makro-Parameter ein einzelnes # vorangestellt, bewirkt dies, dass der Makro-Parameter nicht einfach mit dem übergebenen Argument ersetzt wird, sondern, dass der übergebene Code als String in doppelten Anführungszeichen " " interpretiert wird, weswegen diese Direktive liebevoll als Stringifizierung
bezeichnet wird. In anderen Quellen wird er auch als Stringoperator
oder auf Englisch als Stringizer
bezeichnet.
|
|
Details
Nachfolgend die beiden Zeilen, wie der Preprozessor sie übersetzt:
|
|
Es ist zu beachten, dass das Zeichen # hier einen Makro-Operator darstellt, sprich eine Verknüpfung von Makro-Operanden. In diesem Falle handelt es sich um einen unären Makro-Operator, der einen Operanden rechts erwartet. Als Operanden sind bei der Stringifizierung explizit nur Makro-Parameter gültig. Wird versucht, dieser Makro-Operator anderweitig im Code zu verwenden, so wir der Compiler einen Fehler melden.
Sollte der zu stringifizierende Operand doppelte Anführungszeichen beinhalten, so werden diese automatisch vom Preprozessor mit Escape-Sequenzen eingebettet.
|
|
Nachfolgend die Zeile, wie der Preprozessor sie übersetzt:
|