Namensräume
Varianten
Aktionen

Präprozessor

Von cppreference.com
< c

Der Präprozessor wird in Übersetzungsphase 4, vor der eigentlichen Kompilierung, ausgeführt. Das Ergebnis der Präprozessierung ist eine einzelne Datei, die dann an den eigentlichen Compiler übergeben wird.

Inhalt

[bearbeiten] Direktiven

Die Präprozessordirektiven steuern das Verhalten des Präprozessors. Jede Direktive belegt eine Zeile und hat das folgende Format:

  • # Zeichen
  • Präprozessierungsanweisung (eine von define, undef, include, if, ifdef, ifndef, else, elif, elifdef, elifndef(seit C23), endif, line, embed(seit C23), error, warning(seit C23), pragma) [1]
  • Argumente (abhängig von der Anweisung)
  • Zeilenumbruch.

Die Null-Direktive (# gefolgt von einem Zeilenumbruch) ist erlaubt und hat keine Wirkung.

[bearbeiten] Fähigkeiten

Der Präprozessor bietet folgende Fähigkeiten zur Übersetzung von Quelldateien:

  • bedingte Kompilierung von Teilen der Quelldatei (gesteuert durch die Direktiven #if, #ifdef, #ifndef, #else, #elif, #elifdef, #elifndef(seit C23) und #endif).
  • Ersetzen von Textmakros, wobei Bezeichner möglicherweise verkettet oder zitiert werden (gesteuert durch die Direktiven #define und #undef sowie die Operatoren # und ##).
  • Einbinden anderer Dateien (gesteuert durch die Direktive #include und geprüft mit __has_include(seit C23)).
  • Auslösen eines Fehlers oder einer Warnung(seit C23) (gesteuert durch die Direktiven #error bzw. #warning(seit C23)).

Die folgenden Aspekte des Präprozessors können gesteuert werden:

  • implementierungsdefinierte Verhaltensweisen (gesteuert durch die Direktive #pragma und den Operator _Pragma(seit C99)).
  • Dateiname und Zeileninformationen, die dem Präprozessor zur Verfügung stehen (gesteuert durch die Direktiven #line).

[bearbeiten] Fußnoten

  1. Dies sind die vom Standard definierten Direktiven. Der Standard definiert kein Verhalten für andere Direktiven: sie können ignoriert werden, eine nützliche Bedeutung haben oder das Programm ungültig machen. Selbst wenn sie ansonsten ignoriert werden, werden sie aus dem Quellcode entfernt, wenn die Präprozessierung abgeschlossen ist. Eine gängige nicht standardmäßige Erweiterung ist die Direktive #warning, die eine benutzerdefinierte Meldung während der Kompilierung ausgibt.(bis C23)

[bearbeiten] Beispiel

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 6.10 Präprozessordirektiven (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 6.10 Präprozessordirektiven (S. 117-129)
  • C11-Standard (ISO/IEC 9899:2011)
  • 6.10 Präprozessordirektiven (S. 160-178)
  • C99-Standard (ISO/IEC 9899:1999)
  • 6.10 Präprozessordirektiven (S. 145-162)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 3.8 Präprozessordirektiven

[bearbeiten] Siehe auch

C-Dokumentation für Vordefinierte Makrosymbole
C-Dokumentation für Makrosymbol-Index
C++-Dokumentation für Präprozessor