#define (C++)
Nach oben zu Makros definieren und deren Definition aufheben - Index
Syntax
#define makro_bezeichner <symbolfolge> #define makro_bezeichner(<argument_liste>) <symbolfolge>
Beschreibung
Die Direktive #define definiert ein Makro. Makros stellen einen Mechanismus zur Verfügung, mit dem Symbole ersetzt werden können, wobei dies mit oder ohne einen Satz von formalen Parametern (ähnlich wie ein Funktionsaufruf) geschehen kann.
Jedes Mal, wenn makro_bezeichner
in Ihrem Quellprogramm nach dieser Steuerzeile auftritt, wird er durch die möglicherweise leere symbolfolge
ersetzt und zwar an seiner Originalposition (es gibt dabei einige Ausnahmen, die später behandelt werden). Diese Ersetzung nennt man Makroerweiterung. Die symbolfolge
wird manchmal Rumpf des Makros genannt.
Eine leere symbolfolge
bewirkt, dass der betreffende makro_bezeichner
an jeder Stelle aus dem Quellprogramm entfernt wird.
Nach jeder einzelnen Makroerweiterung wird der dadurch neu erzeugte Text nochmals durchsucht. Dies bietet die Möglichkeit, verschachtelte Makros zu entwerfen: Der Erweiterungstext kann Makrobezeichner enthalten, die ersetzt werden. Wenn ein Makro jedoch in einen Text umgewandelt wird, der wie eine Präprozessor-Direktive aussieht, wird diese nicht vom Präprozessor erkannt. Für die Makroerweiterung gibt es folgende Einschränkungen:
- Tritt ein Makrobezeichner im Quelltext innerhalb von String-Konstanten, Zeichenkonstanten oder Kommentaren auf, so wird keine Erweiterung durchgeführt.
- Ein Makro wird nicht bei seiner eigenen Erweiterung erweitert (
#define A A
wird also nicht unendlich oft erweitert).
Beispiel
#define HI "Ich wünsche Ihnen einen schönen Tag!" #define empty #define NIL "" #define GETSTD #include <stdio.h>
Die zweite Syntaxform ermöglicht das Erstellen von Makros mit Argumenten oder funktionsartigen Makros.