13 KiB
[gram.cpp]
Annex A (informative) Grammar summary [gram]
A.13 Preprocessing directives [gram.cpp]
preprocessing-file:
groupopt
module-file
module-file:
pp-global-module-fragmentopt pp-module groupopt pp-private-module-fragmentopt
pp-global-module-fragment:
module ; new-line groupopt
pp-private-module-fragment:
module : private ; new-line groupopt
group:
group-part
group group-part
group-part:
control-line
if-section
text-line
conditionally-supported-directive
include pp-tokens new-line
embed pp-tokens new-line
define identifier replacement-list new-line
define identifier lparen identifier-listopt ) replacement-list new-line
define identifier lparen ... ) replacement-list new-line
define identifier lparen identifier-list , ... ) replacement-list new-line
undef identifier new-line
line pp-tokens new-line
error pp-tokensopt new-line
warning pp-tokensopt new-line
pragma pp-tokensopt new-line
new-line
if-section:
if-group elif-groupsopt else-groupopt endif-line
if constant-expression new-line groupopt
ifdef identifier new-line groupopt
ifndef identifier new-line groupopt
elif-groups:
elif-group elif-groupsopt
elif constant-expression new-line groupopt
elifdef identifier new-line groupopt
elifndef identifier new-line groupopt
else new-line groupopt
endif new-line
text-line:
pp-tokensopt new-line
conditionally-supported-directive:
pp-tokens new-line
lparen:
a ( character not immediately preceded by whitespace
identifier-list:
identifier
identifier-list , identifier
replacement-list:
pp-tokensopt
pp-tokens:
preprocessing-token pp-tokensopt
embed-parameter-seq:
embed-parameter embed-parameter-seqopt
embed-parameter:
embed-standard-parameter
embed-prefixed-parameter
embed-standard-parameter:
limit ( pp-balanced-token-seq )
prefix ( pp-balanced-token-seqopt )
suffix ( pp-balanced-token-seqopt )
if_empty ( pp-balanced-token-seqopt )
embed-prefixed-parameter:
identifier :: identifier
identifier :: identifier ( pp-balanced-token-seqopt )
pp-balanced-token-seq:
pp-balanced-token pp-balanced-token-seqopt
pp-balanced-token:
( pp-balanced-token-seqopt )
[ pp-balanced-token-seqopt ]
{ pp-balanced-token-seqopt }
any pp-token except:
parenthesis (U+0028 left parenthesis and U+0029 right parenthesis),
bracket (U+005b left square bracket and U+005d right square bracket), or
brace (U+007b left curly bracket and U+007d right curly bracket).
new-line:
the new-line character
defined-macro-expression:
defined identifier
defined ( identifier )
h-preprocessing-token:
any preprocessing-token other than >
h-pp-tokens:
h-preprocessing-token h-pp-tokensopt
header-name-tokens:
string-literal
< h-pp-tokens >
has-include-expression:
__has_include ( header-name )
__has_include ( header-name-tokens )
has-embed-expression:
__has_embed ( header-name pp-balanced-token-seqopt )
__has_embed ( header-name-tokens pp-balanced-token-seqopt )
has-attribute-expression:
__has_cpp_attribute ( pp-tokens )
pp-module:
exportopt module pp-tokensopt ; new-line
pp-import:
exportopt import header-name pp-tokensopt ; new-line
exportopt import header-name-tokens pp-tokensopt ; new-line
exportopt import pp-tokens ; new-line
va-opt-replacement:
VA_OPT ( pp-tokensopt )