![]() Vorherige Seite |
![]() Eine Ebene hoch |
![]() Nächste Seite |
---|
Der Preprozessor bietet die Möglichkeit, Teile eines Quellcodes nur bedingt zu übersetzen. Das heißt, die Teile, die nicht übersetzt werden, sind in dem übersetzten Programm nicht existent. Es gibt drei Möglichkeiten, eine Bedingte Übersetzung einzuleiten:
#if
konstante Bedingung#ifdef
Bezeichner (oder #if defined
Bezeichner)#ifndef
Bezeichner (oder #if !defined
Bezeichner)Die erste Variante ähnelt der bedingten Anweisung, aber: Der Befehl wird mit dem Doppelkreuz eingeleitet, die Bedingung folgt ohne Klammern und die Bedingung darf nur aus Konstanten bestehen. (Makronamen sind Konstanten.) Beispiel:
#if MODUS==3
Die zweite und dritte Variante prüft, ob ein Makro existiert oder nicht. Beispiel: Während der Erstellung eines Programms ist es sinnvoll, an vielen Stellen Ausgabebefehle einzufügen, die aber bei der endgültigen Fassung entfernt werden sollen. Dafür wird gleich am Anfang das leere Makro DEBUG definiert.
#define DEBUG ... #if DEBUG printf("Zahl1: %d\n", Zahl1); #endif ...
Wenn die zusätzlichen Ausgaben entfernt werden sollen, muss nur die Zeile #define DEBUG gelöscht werden.
In dem Beispiel wurde bereits der Befehl zur Beendigung der Bedingten Übersetzung verwendet:
#endif
Der Preprozessor verwendet statt der geschweiften Klammern diesen Befehl, um den bedingten Block einzugrenzen.
Wenn es darum geht zwei Programmblöcke alternativ zu übersetzen, also entweder den einen oder den anderen, so steht folgender Befehl zur Verfügung:
#else
Beispiel:
#if DEBUG printf("Debug-Version\n"); #else printf("Release-Version\n"); #endif
Wie bei den Befehlen für bedingte Anweisungen gibt es beim Preprozessor die Möglichkeit Bedingungen zu verketten. Anstatt die Befehle #else und #if hintereinander zu schreiben, wird der Befehl
#elif
eingeführt. Beispiel:
#if MODUS==1 printf("Modus 1\n"); #elif MODUS==2 printf("Modus 2\n"); #elif MODUS==A printf("Modus A\n"); #endif
Die verbleibenden Befehle des Preprozessors #line, #error und #pragma werden hier nicht behandelt.