Programmiersprache C/C++

Präprozessor

Direktive #if

Direktiven #if, #elif, #else, #endif

  #if ausdruck             /* Unvollständige Alternative */
    textblock
  #endif
Liefert ausdruck einen Wert ungleich Null ("wahr"), dann wird textblock vom Präprozessor dem Compiler übergeben.
Enthält textblock weitere Direktiven, so werden diese zuvor vom Präprozessor ausgewertet.

  #if ausdruck             /* Vollständige Alternative */
    textblock_1 
  #else 
    textblock_2
  #endif
Liefert ausdruck einen Wert ungleich Null ("wahr"), dann wird textblock_1 vom Präprozessor dem Compiler übergeben. Liefert ausdruck dagegen den Wert 0 ("falsch"), dann wird textblock_2 übergeben.
Enthalten textblock_1 oder textblock_2 weitere Direktiven, so werden diese zuvor vom Präprozessor ausgewertet.

Auch Mehrfachverzweigungen können formuliert werden:

  #if ausdruck_1
    textblock_1 
  #elif ausdruck_2           /*  else if  */
    textblock_2 
    . . . 
  #else 
    textblock_n 
  #endif
Jede #if-Direktive in einer Quelltextdatei muß mit einem korrespondierenden #endif abgeschlossen sein. Zwischen #if und #endif kann eine beliebige Zahl von #elif-Direktiven, aber nur eine einzige #else-Direktive erscheinen. Ein #else muß grundsätzlich die letzte Direktive vor dem jeweils abschließenden #endif darstellen.

#if, #elif, #else und #endif lassen sich als Teile anderer #if-Konstrukte formulieren, wobei der Präprozessor #else, #elif und #endif jeweils dem letzten #if zuordnet, für das noch keine derartige Direktive erschienen ist.
Der Präprozessor wählt einen Textblock aus, indem er so lange den Ausdruck der einzelnen #if- und #elif-Direktiven auswertet, bis einer dieser Ausdrücke einen Wert ungleich 0 ergibt. Eine ausgewählte Gruppe umfaßt den gesamten Text bis zum korrespondierenden #elif, #else oder #endif, wobei dieser Text durchaus auch andere Präprozessor-Direktiven enthalten kann, die der Präprozessor vor der Übergabe der Gruppe an den Compiler auf normale Weise bearbeitet.

Durch #if, #elif, #else und #endif ausgeschlossene Gruppen eines Quelltexts werden so behandelt, als seien sie nicht vorhanden.

Der Ausdruck kann einen beliebigen Ausdruck darstellen, der während der Compilierung allerdings einen konstanten Wert ergeben muß.
Der Operator sizeof ist innerhalb des Ausdrucks nicht anwendbar. Nicht zulässig sind auch explizite Typumwandlungen und Gleitpunktwerte.

Der Textblock kann eine beliebige Kombination von Sprachanweisungen und Präprozessor-Direktiven enthalten.


Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 03.12.1995