Namespaces
Variants

Preprocessor

From cppreference.net
< c

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

Inhaltsverzeichnis

Direktiven

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

  • # Zeichen
  • Präprozessor-Direktive (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 (hängt von der Direktive ab)
  • Zeilenumbruch.

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

Fähigkeiten

Der Präprozessor verfügt über folgende Quelltext-Übersetzungsfähigkeiten:

  • bedingte Kompilierung von Teilen der Quelldatei (gesteuert durch Direktiven #if , #ifdef , #ifndef , #else , #elif , #elifdef , #elifndef (seit C23) und #endif ).
  • Ersetzen von Textmakros unter möglicher Verkettung oder Quotierung von Identifikatoren (gesteuert durch Direktiven #define und #undef , sowie Operatoren # und ## )
  • Einbinden anderer Dateien (gesteuert durch Direktive #include und geprüft mit __has_include (seit C23) )
  • Verursachen eines Fehlers oder einer Warnung (seit C23) (gesteuert durch Direktive #error bzw. #warning (seit C23) )

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

Fußnoten

  1. Dies sind die durch den Standard definierten Direktiven. Der Standard definiert kein Verhalten für andere Direktiven: Sie könnten ignoriert werden, eine nützliche Bedeutung haben oder das Programm fehlerhaft machen. Selbst wenn sie ansonsten ignoriert werden, werden sie aus dem Quellcode entfernt, wenn der Präprozessor fertig ist. Eine häufige nicht-standardisierte Erweiterung ist die Direktive #warning , die eine benutzerdefinierte Meldung während der Kompilierung ausgibt. (bis C23)

Beispiel

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 6.10 Präprozessor-Direktiven (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äprozessor-Direktiven (S: 145-162)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 3.8 Präprozessordirektiven

Siehe auch

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