#if, #elif, #else und #endif (C++)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Bedingte Compilierung (Übersicht) - Index


Syntax

#if konstantenausdruck-1
<abschnitt-1>
<#elif konstantenausdruck-2 neu-zeile abschnitt-2>
  .
  .
  .
<#elif konstantenausdruck-n neu-zeile abschnitt-n>
<#else <neu-zeile> ende-abschnitt>
#endif

Beschreibung

Der Compiler unterstützt die bedingte Compilierung, indem er die entsprechenden Quelltextzeilen mit Leerzeilen ersetzt. Es werden alle Zeilen ignoriert, die gemäß Präprozessor-Direktiven nicht compiliert werden sollen. Alle Direktiven für die bedingte Compilierung müssen in den Quelltext- oder Include-Dateien abgeschlossen werden, in denen sie begonnen wurden.

Die Bedingungsdirektiven #if, #elif, #else und #endif funktionieren wie die normalen Bedingungsoperatoren von C. Wenn konstantenausdruck_1 (Gegenstand einer Makroerweiterung) einen Wert ungleich Null (true) ergibt, werden die (möglicherweise leeren) Quelltextzeilen in abschnitt_1 (ganz gleich, ob Präprozessor-Direktiven oder normaler Quelltext) vom Präprozessor verarbeitet und dann gegebenenfalls dem Borland C++ Compiler übergeben. Andernfalls, wenn konstantenausdruck_1 den Wert null ergibt, wird abschnitt_1 ignoriert (keine Makroerweiterung und keine Compilierung).

Im Fall, dass die Bedingung true ist, wird, nachdem abschnitt_1 vom Präprozessor verarbeitet wurde, der Quelltext bis zur zugehörigen #endif-Direktive (die diesen Block der bedingten Compilierung beendet) übergangen und mit dem nächsten Abschnitt fortgefahren. Ist die Bedingung false, so geht die Kontrolle an die nächste #elif-Zeile (falls vorhanden) über, in der konstantenausdruck_2 berechnet wird. Ergibt sich dabei der Wert true, so wird abschnitt_2 verarbeitet, wonach die Kontrolle zur zugehörigen #endif-Direktive geht. Andernfalls, wenn konstantenausdruck_2 den Wert false hat, geht die Kontrolle zur nächsten #elif-Direktive, und so geht es weiter, bis entweder #else oder #endif erreicht wird. Die optionale #else-Direktive dient als Alternativzweig, falls alle vorangegangenen Prüfungen den Wert false ergeben haben. Die Direktive #endif schließt die Gruppe der bedingten Anweisungen ab.

Der verarbeitete Abschnitt kann selbst weitere Bedingungs-Direktiven enthalten, die beliebig tief verschachtelt sein können; zu jeder #if-Direktive muss aber genau eine zugehörige #endif-Direktive vorhanden sein.

Das Endergebnis des vorstehenden Beispiels ist, dass nur ein einziger (möglicherweise leerer) Abschnitt weiterverarbeitet wird. Die übergangenen Abschnitte sind nur relevant, um die Struktur verschachtelter Bedingungen nicht zu verletzen und es zu ermöglichen, dass jedem #ifdas richtige #endif zugeordnet werden kann.

Der Konstantenausdruck, dessen Wert geprüft wird, muss einen konstanten, ganzzahligen Wert liefern.

Siehe auch