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
#defineund#undefsowie die Operatoren#und##). - Einbinden anderer Dateien (gesteuert durch die Direktive
#includeund geprüft mit__has_include(seit C23)). - Auslösen eines Fehlers oder einer Warnung(seit C23) (gesteuert durch die Direktiven
#errorbzw.#warning(seit C23)).
Die folgenden Aspekte des Präprozessors können gesteuert werden:
- implementierungsdefinierte Verhaltensweisen (gesteuert durch die Direktive
#pragmaund den Operator_Pragma(seit C99)). - Dateiname und Zeileninformationen, die dem Präprozessor zur Verfügung stehen (gesteuert durch die Direktiven
#line).
[bearbeiten] Fußnoten
- ↑ 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
| Dieser Abschnitt ist unvollständig Grund: kein 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
|