Files
2025-10-25 03:02:53 +03:00

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

control-line:

include pp-tokens new-line

pp-import

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-group:

if constant-expression new-line groupopt

ifdef identifier new-line groupopt

ifndef identifier new-line groupopt

elif-groups:
elif-group elif-groupsopt

elif-group:

elif constant-expression new-line groupopt

elifdef identifier new-line groupopt

elifndef identifier new-line groupopt

else-group:

else new-line groupopt

endif-line:

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 )