本文介绍 C 和 C++ 预处理器的正式语法。 其中包含预处理指令和运算符的语法。 有关详细信息,请参阅预处理器和 Pragma 指令以及 __pragma
和 _Pragma
关键字。
语法摘要的定义
终止符是语法定义中的终结点。 不提供其他解决方法。 终止符包括保留字和用户定义的标识符的集。
非终止符是语法中的占位符。 它们中的大多数是在此语法摘要中的其他位置定义的。 定义可是递归的。 《C++ 语言参考》的词法约定部分定义了以下非终止符:
constant
、、constant-expression
identifier
、keyword
、operator
、punctuator
可选组件由带下标的 opt 指示。 例如,以下语法指示包含在大括号中的可选表达式:
{
optexpression
}
文档约定
约定将对不同的语法组件使用不同的字体特性。 符号和字体如下所示:
特性 | 说明 |
---|---|
nonterminal |
斜体类型指示非终止符。 |
#include |
粗体类型的终止符是必须按所示方式输入的文本保留字和符号。 此上下文中的字符始终区分大小写。 |
opt | 后跟 opt 的非终止符始终是可选的。 |
default typeface | 用此字样描述或列出的集中的字符可在语句中用作终止符。 |
跟在非终止符之后的冒号 (:
) 引入其定义。 替代定义在单独的行上列出。
在代码语法块中,默认字样中的以下符号具有特殊含义:
符号 | 说明 |
---|---|
[ ] | 方括号括起的是可选元素。 |
{ | } | 大括号括起的是替代元素,由竖线分隔。 |
... | 指示可以重复上一个元素模式。 |
在代码语法块中,逗号 (,
)、句点 (.
)、分号 (;
)、冒号 (:
)、括号 (( )
)、双引号 ("
) 和单引号 ('
) 是文本。
预处理器语法
control-line
:
#define
identifier
token-string
opt
#define
identifier
(
identifier
opt ,
... ,
identifier
opt opt )
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
任何其他常数表达式
conditional
:
if-part
elif-parts
opt else-part
opt 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
:以下项之一
0
1
2
3
4
5
6
7
8
9
token-string
:
token
的字符串
token
:
keyword
identifier
constant
operator
punctuator
filename
:
合法操作系统文件名
path-spec
:
合法文件路径
text
:
文本的任何序列
注意
《C++ 语言参考》的词法约定部分扩展了以下非终止符:constant
、constant-expression
、identifier
、keyword
、operator
和 punctuator
。