#define (C++)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

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.

Siehe auch