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.