Preprocessor Grammar

#define identifiertoken-stringopt

#define identifier[(identifieropt,...,identifieropt)] token-stringopt

defined( identifier**)**

defined identifier

#include"path-spec"

#include<path-spec>

#line digit-sequence**"filename"**opt

#undefidentifier

#error token-string

#pragma token-string

conditional :

if-partelif-partsoptelse-partoptendif-line

if-part :

if-linetext

if-line :

#ifconstant-expression
#ifdefidentifier
#ifndefidentifier

elif-parts :

elif-linetext
elif-partselif-linetext

elif-line :

#elifconstant-expression

else-part :

else-linetext

else-line :

#else

endif-line :

#endif

digit-sequence :

digit
digit-sequencedigit

digit : one of

0123456789

token-string :

String of tokens

token :

keyword
identifier
constant
operator
punctuator

filename :

Legal operating system filename

path-spec :

Legal file path

text :

Any sequence of text

Note   The following nonterminals are expanded in Appendix A, , of the C++ Language Reference: constant, constant-expression, identifier, keyword, operator, and punctuator.