Freigeben über


Zusammenfassung der Präprozessorgrammatik (C/C++)

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.

Siehe auch

C/C++-Präprozessorreferenz