Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird die formale Grammatik des C- und C++-Präprozessors beschrieben. Sie behandelt die Syntax der Präverarbeitungsdirektiven und -operatoren. Weitere Informationen finden Sie unter Präprozessor- und Pragma-Direktiven und den __pragma Schlüsselwörtern_Pragma.
Definitionen für die Grammatikzusammenfassung
Bei Terminalen handelt es sich um Endpunkte in einer Syntaxdefinition. Es ist keine andere Auflösung möglich. Terminale enthalten den Satz reservierter Wörter und benutzerdefinierter Bezeichner.
Bei Nichtterminalen handelt es sich um Platzhalter in der Syntax. Die meisten sind an anderer Stelle in dieser Syntaxzusammenfassung definiert. Definitionen können rekursiv sein. Die folgenden Nonterminals sind im Lexikalkonventionen-Abschnitt der C++-Sprachreferenz definiert:
constant, , constant-expressionidentifier, keyword, , operatorpunctuator
Eine optionale Komponente wird durch das tiefgestellte opt angegeben. Die folgende Syntax gibt beispielsweise einen optionalen Ausdruck an, der in geschweifte geschweifte Klammern eingeschlossen ist:
{optexpression }
Dokumentkonventionen
Die Konventionen verwenden verschiedene Schriftartattribute für unterschiedliche Syntaxkomponenten. Die Symbole und die Schriftarten lauten wie folgt:
| Attribut | BESCHREIBUNG |
|---|---|
nonterminal |
Kursivschrift gibt Nichtterminale an. |
#include |
Fett formatierte Terminale sind literale, reservierte Symbole und Wörter, die wie gezeigt eingegeben werden müssen. Bei Zeichen in diesem Kontext wird immer die Groß-/Kleinschreibung beachtet. |
| opt | Nichtterminale, auf die opt folgt, sind immer optional. |
| Standardschriftart | Zeichen des in dieser Schriftart beschriebenen oder aufgeführten Satzes können als Terminale in C-Anweisungen verwendet werden. |
Ein Doppelpunkt ( : ) nach einem Nichtterminal führt ihre Definition ein. Alternative Definitionen werden in separaten Zeilen aufgeführt.
In Codesyntaxblöcken haben diese Symbole in der Standardschriftart eine besondere Bedeutung:
| Symbol | Beschreibung |
|---|---|
| [ ] | Eckige Klammern umgeben ein optionales Element. |
| { | } | Geschweifte geschweifte Klammern umgeben alternative Elemente, getrennt durch vertikale Balken. |
| ... | Gibt an, dass das vorherige Elementmuster wiederholt werden kann. |
In Codesyntaxblöcken sind Kommas (), Punkte (,.), Semikolons (), Doppelpunkte (;:), Klammern (( )), Doppelte Anführungszeichen (") und Einfache Anführungszeichen (') Literale.
Präprozessorgrammatik
control-line:
#define identifier token-stringopt
#defineidentifier ( identifieropt , ... , identifieropt opt token-string)opt
#include "path-spec"
#include <path-spec>
#line digit-sequence "filename"opt
#undef identifier
#error token-string
#pragma token-string
constant-expression:
defined( identifier )
defined identifier
beliebiger anderer Konstantenausdruck
conditional:
if-part elif-partsopt else-partopt endif-line
if-part:
if-line text
if-line:
#if constant-expression
#ifdef identifier
#ifndef identifier
elif-parts:
elif-line text
elif-parts elif-line text
elif-line:
#elif constant-expression
else-part:
else-line text
else-line:
#else
endif-line:
#endif
digit-sequence:
digit
digit-sequence digit
digit: einer von
0 1 2 3 4 5 6 7 8 9
token-string:
Zeichenfolge von token
token:
keyword
identifier
constant
operator
punctuator
filename:
Dateiname des gesetzlichen Betriebssystems
path-spec:
Gültiger Dateipfad
text:
Eine beliebige Textsequenz
Hinweis
Die folgenden Nonterminals werden im Abschnitt lexikalische Konventionen der C++-Sprachreferenz erweitert: constant, , constant-expressionidentifier, keywordoperatorund punctuator.