Preprocessor
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:
- das # Zeichen.
- eine Folge von:
-
- ein standarddefinierter Direktivenname (aufgelistet unten ) gefolgt von den entsprechenden Argumenten, oder
- ein oder mehrere Präprozessor-Tokens , bei denen das Anfangstoken kein standarddefinierter Direktivenname ist; in diesem Fall ist die Direktive bedingt unterstützt mit implementierungsdefinierter Semantik (z.B. eine häufige nicht-standardisierte Erweiterung ist die Direktive #warning , die eine benutzerdefinierte Meldung während der Kompilierung ausgibt) (bis C++23) , oder
- nichts, in diesem Fall hat die Direktive keine Wirkung.
- ein Zeilenumbruch.
|
Die Modul- und Importdirektiven sind ebenfalls Präprozessordirektiven. |
(since C++20) |
Präprozessordirektiven dürfen nicht aus Makroexpansion stammen.
#define EMPTY EMPTY # include <file.h> // keine Präprozessor-Direktive
Fähigkeiten
Der Präprozessor verfügt über folgende Quelltext-Übersetzungsfähigkeiten:
- bedingt Teile der Quelldatei kompilieren (gesteuert durch Direktiven #if , #ifdef , #ifndef , #else , #elif , #elifdef , #elifndef (seit C++23) und #endif ).
- ersetzen Textmakros unter möglicher Verkettung oder Quotierung von Bezeichnern (gesteuert durch Direktiven #define und #undef , sowie Operatoren # und ## ).
- einbinden anderer Dateien (gesteuert durch Direktive #include und geprüft mit __has_include (seit C++17) ).
- einen Fehler oder eine Warnung (seit C++23) verursachen (gesteuert durch Direktive #error oder #warning entsprechend (seit C++23) ).
Die folgenden Aspekte des Präprozessors können gesteuert werden:
- Implementierungsdefiniertes Verhalten (gesteuert durch Direktive #pragma und Operator _Pragma (seit C++11) ). Zusätzlich unterstützen einige Compiler (in unterschiedlichem Maße) den Operator __pragma als nicht-standardisierte Erweiterung.
- Dateinamen- und Zeileninformationen für den Präprozessor verfügbar (gesteuert durch Direktive #line ).
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| CWG 2001 | C++98 | das Verhalten bei Verwendung nicht standarddefinierter Direktiven war unklar | als bedingt unterstützt festgelegt |
Siehe auch
|
C++ Dokumentation
für
Vordefinierte Makrosymbole
|
|
|
C++ Dokumentation
für
Makrosymbol-Index
|
|
|
C-Dokumentation
für
Präprozessor
|