Partager via


Résumé de la grammaire du préprocesseur (C/C++)

Cet article décrit la grammaire formelle du préprocesseur C et C++. Il couvre la syntaxe des directives et opérateurs de prétraitement. Pour plus d’informations, consultez les directives Preprocessor et Pragma et les __pragma mots clés._Pragma

Résumé des définitions pour la grammaire

Les terminaux sont des points de terminaison dans une définition de syntaxe. Aucune autre résolution n'est possible. Les terminaux incluent l'ensemble des mots réservés et des identificateurs définis par l'utilisateur.

Les éléments non terminaux sont des espaces réservés dans la syntaxe. La plupart de ces éléments sont définis ailleurs dans ce résumé de syntaxe. Les définitions peuvent être récursives. Les valeurs non déterminales suivantes sont définies dans la section conventions lexicales de la référence du langage C++ :

constant, , constant-expression, keywordidentifier, , operatorpunctuator

Un composant facultatif est indiqué par l'élément opt indicé. Par exemple, la syntaxe suivante indique une expression facultative entre accolades :

{ expressionopt }

Conventions de document

Les conventions utilisent différents attributs de police pour différents composants de la syntaxe. Les symboles et les polices sont comme suit :

Attribut Description
nonterminal Le type italique indique des symboles non terminaux.
#include Les symboles terminaux en gras sont des mots réservés littéraux et des symboles littéraux qui doivent être écrits comme indiqué. Les caractères situés dans ce contexte respectent toujours la casse.
option Les symboles non terminaux suivis d’opt sont toujours facultatifs.
police par défaut Les caractères du jeu décrit ou répertorié dans cette police peuvent être utilisés comme symboles terminaux dans les instructions C.

Un signe deux-points (:) qui suit un symbole non terminal introduit sa définition. D'autres définitions apparaissent sur des lignes distinctes.

Dans les blocs de syntaxe de code, ces symboles dans la police par défaut ont une signification spéciale :

Symbole Description
[ ] Crochets entourent un élément facultatif.
{ | } Les accolades entourent d’autres éléments, séparés par des barres verticales.
... Indique que le modèle d’élément précédent peut être répété.

Dans les blocs de syntaxe de code, les virgules (,), les points (.), les points-virgules (), les points-virgules (:;), les parenthèses (( )), les guillemets doubles (") et les guillemets simples (') sont des littéraux.

Grammaire du préprocesseur

control-line:
#define identifier token-stringopt
#defineidentifier ( identifieropt , ... , identifieropt ) token-string
#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
 toute autre expression constante

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 : l'un des éléments suivants :
0 1 2 3 4 5 6 7 8 9

token-string:
 Chaîne de token

token:
keyword
identifier
constant
operator
punctuator

filename:
 Nom de fichier du système d’exploitation légal

path-spec:
 Chemin d’accès de fichier conforme

text:
 N’importe quelle séquence de texte

Remarque

Les éléments non déterminaux suivants sont développés dans la section conventions lexicales de la référence du langage C++ : constant, , constant-expression, identifier, , keywordoperator, et punctuator.

Voir aussi

Informations de référence sur le préprocesseur C/C++