![]() Vorherige Seite |
![]() Eine Ebene hoch |
![]() Nächste Seite |
---|
Mit #define können Sie im Quellcode Makros definieren, die noch vor der eigentlichen Übersetzung vom Preprozessor durch den gewünschten Inhalt ersetzt werden. Es gibt zwei Versionen:
#define
Makroname Makroinhalt#define
Makroname (Argumentenliste) MakroinhaltDie erste Version kennen wir aus dem Programm für Primzahlen Prim1.c:
#define MAX_ZAHL 100 ... printf("Primzahlen zwischen 1 und %d:\n", MAX_ZAHL); ... for(Proband=1; Proband<=MAX_ZAHL; Proband++) { ...
Nach der Zeile mit #define wird der Preprozessor alle Stellen, an denen er die Bezeichnung MAX_ZAHL findet die Bezeichnung durch die Zahl 100 ersetzen. Es ist üblich Makronamen in Großbuchstaben zu schreiben, damit man sie leichter von sonstigen Namen unterscheiden kann.
Bei der zweiten Version werden dem Makro Argumente übergeben. Beispiel:
#define MAX(A, B) ((A)>(B)?(A):(B))
Der folgende Aufruf führt zu dem gewünschten Resultat von 23:
a = MAX(20+3, 20-3);
Hier wird die Zeile vom Preprozessor wie folgt ersetzt:
a = ((20+3)>(20-3)?(20+3):(20-3));
An diesem Beispiel wird eine Grenze von Makros deutlich. In der entstandenen Zeile taucht die Operation 20+3 zweimal auf. Bei Konstanten, wie in unserem Beispiel, werden die Zahlen gleich vom Übersetzer zusammengefasst. Handelt es sich aber um Variablen, so wird die Operation doppelt ausgeführt, was in zeitkritischen Anwendungen unnötig Zeit kostet.
Makros sind nur innerhalb der aktuellen Quelldatei gültig. Soll ein Makro nur für einen begrenzten Bereich im Quellcode gültig sein, so kann es mit folgendem Befehl wieder aufgehoben werden:
#undef Makroname