前言
附录的语法类别中由中文括号()括起的中文是我为了方便自己阅读而标注的中文翻译,未使用斜体,原文中并无此部分。由于本人翻译水平有限,某些专业名词可能翻译不准确,如果您有更准确的翻译建议请在下方评论指出,谢谢。
C99标准 6.1 记法(Notation)
在此条款中使用的语法记法中,语法类别(非终结符)用 斜体 表示,字面值和字符集成员(终结符)用 粗体 表示。非终结符后面的冒号(:)引入了它的定义。可选的定义在单独的行中列出,除非以 " one of " 作为前缀。一个可选符号由下标 " opt " 表示,所以
{ expressionopt }
指示用大括号括起来的可选表达式
当在主要文本中引用语法类别时,它们不会被斜体显示,单词之间用空格分隔,而不是连字符。
附件A对该语言的语法进行了总结。
注意:记法在6.1中描述
A.1 词法语法(Lexical grammar)
A.1.1 词法元素(Lexical elements)
(6.4)token(符号):
keyword(关键字)
identifier(标识符)
constant(常量)
string-literal(字符串字面量)
punctuator(标点符号)
(6.4)preprocessing-token(预处理符号):
header-name(头文件名)
identifier(标识符)
pp-number(预处理数字)
character-constant(字符常量)
string-literal(字符串字面量)
punctuator(标点符号)
each non-white-space character that cannot be one of the above
A.1.2 关键字(Keywords)
(6.4.1)keyword: one of
auto enum restrict unsigned
break extern return void
case float short volatile
char for signed while
const goto sizeof _Bool
continue if static _Complex
default inline struct _Imaginary
do int switch
double long typedef
else register union
A.1.3 标识符(Identifiers)
(6.4.2.1)identifier(标识符):
identifier-nondigit(非数字标识符)
identifier identifier-nondigit(标识符 非数字标识符)
identifier digit(标识符 数字)
(6.4.2.1)identifier-nondigit(非数字标识符):
nondigit(非数字)
universal-character-name(通用字符名)
other implementation-defined characters(其他实现定义的字符)
(6.4.2.1)nondigit(非数字): one of
_ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
(6.4.2.1)digit(数字): one of
0 1 2 3 4 5 6 7 8 9
A.1.4 通用字符名(Universal character names)
(6.4.3)universal-character-name:
\u hex-quad(\u 四位十六进制)
\U hex-quad hex-quad(\U 四位十六进制 四位十六进制)
(6.4.3)hex-quad(四位十六进制):
hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit(十六进制数字 十六进制数字 十六进制数字 十六进制数字)
A.1.5 常量(Constants)
(6.4.4)constant(常量):
integer-constant(整型常量)
floating-constant(浮点常量)
enumeration-constant(枚举常量)
character-constant(字符常量)
(6.4.4.1)integer-constant(整型常量):
decimal-constant integer-suffixopt(十进制常量 整型后缀可选)
octal-constant integer-suffixopt(八进制常量 整型后缀可选)
hexadecimal-constant integer-suffixopt(十六进制常量 整型后缀可选)
(6.4.4.1)decimal-constant(十进制常量):
nonzero-digit(非零数字)
decimal-constant digit(十进制常量 数字)
(6.4.4.1)octal-constant(八进制常量):
0
octal-constant octal-digit(八进制常量 八进制数字)
(6.4.4.1)hexadecimal-constant(十六进制常量):
hexadecimal-prefix hexadecimal-digit(十六进制前缀 十六进制数字)
hexadecimal-constant hexadecimal-digit(十六进制常量 十六进制数字)
(6.4.4.1)hexadecimal-prefix(十六进制前缀): one of
0x 0X
(6.4.4.1)nonzero-digit(非零数字): one of
1 2 3 4 5 6 7 8 9
(6.4.4.1)octal-digit(八进制数字): one of
0 1 2 3 4 5 6 7
(6.4.4.1)hexadecimal-digit(十六进制数字): one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
(6.4.4.1)integer-suffix(整型后缀):
unsigned-suffix long-suffixopt(无符号整型后缀 长整型后缀可选)
unsigned-suffix long-long-suffix(无符号整型后缀 双长整型后缀)
long-suffix unsigned-suffixopt(长整型后缀 无符号整型后缀可选)
long-long-suffix unsigned-suffixopt(双长整型后缀 无符号整型后缀可选)
(6.4.4.1)unsigned-suffix(无符号整型前缀): one of
u U
(6.4.4.1)long-suffix(长整型后缀): one of
l L
(6.4.4.1)long-long-suffix(双长整型后缀): one of
ll LL
(6.4.4.2)floating-constant(浮点常量):
decimal-floating-constant(十进制浮点常量)
hexadecimal-floating-constant(十六进制浮点常量)
(6.4.4.2)decimal-floating-constant(十进制浮点常量):
fractional-constant exponent-partopt floating-suffixopt(小数常量 指数部分可选 浮点后缀可选)
digit-sequence exponent-part floating-suffixopt(数字序列 指数部分 浮点后缀可选)
(6.4.4.2)hexadecimal-floating-constant(十六进制浮点常量):
hexadecimal-prefix hexadecimal-fractional-constant binary-exponent-part floating-suffixopt(十六进制前缀 十六进制小数常量 二进制指数部分 浮点后缀可选)
hexadecimal-prefix hexadecimal-digit-sequence binary-exponent-part floating-suffixopt (十六进制前缀 十六进制数字序列 二进制指数部分 浮点后缀可选)
(6.4.4.2)fractional-constant(小数常量):
digit-sequenceopt . digit-sequence(数字序列可选 . 数字序列)
digit-sequence .(数字序列 .)
(6.4.4.2)exponent-part(指数部分):
e signopt digit-sequence(e 符号可选 数字序列)
E signopt digit-sequence(E 符号可选 数字序列)
(6.4.4.2)sign(符号): one of
+ -
(6.4.4.2)digit-sequence(数字序列):
digit(数字)
digit-sequence digit(数字序列 数字)
(6.4.4.2)hexadecimal-fractional-constant(十六进制小数常量):
hexadecimal-digit-sequenceopt . hexadecimal-digit-sequence(十六进制数字序列可选 . 十六进制数字序列)
hexadecimal-digit-sequence .(十六进制数字序列 . )
(6.4.4.2)binary-exponent-part(二进制指数部分):
p signopt digit-sequence(p 符号可选 数字序列)
P signopt digit-sequence(P 符号可选 数字序列)
【译者注】这部分指数按2的幂来解析
(6.4.4.2)hexadecimal-digit-sequence(十六进制数字序列):
hexadecimal-digit(十六进制数字)
hexadecimal-digit-sequence hexadecimal-digit(十六进制数字序列 十六进制数字)
(6.4.4.2)floating-suffix(浮点后缀): one of
f l F L
(6.4.4.3)enumeration-constant(枚举常量):
identifier(标识符)
(6.4.4.4)character-constant(字符常量):
’ c-char-sequence '(’ C字符序列 ')
L’ c-char-sequence '(L’ C字符序列 ')
(6.4.4.4)c-char-sequence(C字符序列):
c-char(C字符)
c-char-sequence c-char(C字符序列 C字符)
(6.4.4.4)c-char(C字符):
any member of the source character set except the single-quote ‘, backslash , or new-line character(源字符集的任何成员,单引号’、反斜杠\或换行字符除外)
escape-sequence(转义序列)
(6.4.4.4)escape-sequence(转义序列):
simple-escape-sequence(简单转义序列)
octal-escape-sequence(八进制转义序列)
hexadecimal-escape-sequence(十六进制转义序列)
universal-character-name(通用字符名)
(6.4.4.4)simple-escape-sequence(简单转义序列): one of
\’ \" \? \\
\a \b \f \n \r \t \v
(6.4.4.4)octal-escape-sequence(八进制转义序列):
\ octal-digit(\ 八进制数字)
\ octal-digit octal-digit(\ 八进制数字 八进制数字)
\ octal-digit octal-digit octal-digit(\ 八进制数字 八进制数字 八进制数字)
(6.4.4.4)hexadecimal-escape-sequence(十六进制转义序列):
\x hexadecimal-digit(\x 十六进制数字)
hexadecimal-escape-sequence hexadecimal-digit(十六进制转义序列 十六进制数字)
A.1.6 字符串字面量(String literals)
(6.4.5)string-literal(字符串字面量):
" s-char-sequenceopt "(" s字符序列 ")
L" s-char-sequenceopt "(L" s字符序列 ")
(6.4.5)s-char-sequence(s字符序列):
s-char(s字符)
s-char-sequence s-char(s字符序列 s字符)
(6.4.5)s-char(s字符):
any member of the source character set except the double-quote ", backslash , or new-line character(源字符集的任何成员,双引号 "、反斜杠\或换行符除外)
escape-sequence(转义序列)
A.1.7 标点符号(Punctuators)
(6.4.6)punctuator(标点符号): one of
[ ] ( ) { } . ->
++ – & * + - ~ !
/ % << >> < > <= >= == != ^ | && ||
? : ; …
= *= /= %= += -= <<= >>= &= ^= |=
, # ##
<: :> <% %> %: %:%:
A.1.8 头文件名(Header names)
(6.4.7)header-name(头文件名):
< h-char-sequence > (< h字符序列 >)
" q-char-sequence "(" q字符序列 ")
(6.4.7)h-char-sequence(h字符序列):
h-char(h字符)
h-char-sequence h-char(h字符序列 h字符)
(6.4.7)h-char(h字符):
any member of the source character set except the new-line character and >(源字符集中除换行字符和>之外的任何成员)
(6.4.7)q-char-sequence(q字符序列):
q-char(q字符)
q-char-sequence q-char(q字符序列 q字符)
(6.4.7)q-char(q字符):
any member of the source character set except the new-line character and "(源字符集的任何成员,除了换行字符和 ")
A.1.9 预处理数字(Preprocessing numbers)
(6.4.8)pp-number(预处理数字):
digit(数字)
. digit(. 数字)
pp-number digit(预处理数字 数字)
pp-number identifier-nondigit(预处理数字 非数字标识符)
pp-number e sign(预处理数字 e 符号)
pp-number E sign(预处理数字 E 符号)
pp-number p sign(预处理数字 p 符号)
pp-number P sign(预处理数字 P 符号)
pp-number .(预处理数字 . )
A.2 短语结构语法(Phrase structure grammar)
A.2.1 表达式(Expressions)
(6.5.1)primary-expression(基本表达式):
identifier(标识符)
constant(常量)
string-literal(字符串字面量)
( expression )( ( 表达式 ) )
(6.5.2)postfix-expression(后缀表达式):
primary-expression(基本表达式)
postfix-expression [ expression ](后缀表达式 [ 表达式 ])
postfix-expression ( argument-expression-listopt )(后缀表达式 ( 实参表达式列表可选 ))
postfix-expression . identifier(后缀表达式 . 标识符)
postfix-expression -> identifier(后缀表达式 -> 标识符)
postfix-expression ++(后缀表达式 ++)
postfix-expression --(后缀表达式 --)
( type-name ) { initializer-list } (( 类型名 ) { 初始化列表 })
( type-name ) { initializer-list , }(( 类型名 ) { 初始化列表 , })
(6.5.2)argument-expression-list(实参表达式列表):
assignment-expression(赋值表达式)
argument-expression-list , assignment-expression(实参表达式列表 , 赋值表达式)
(6.5.3)unary-expression(一元表达式):
postfix-expression(后缀表达式)
++ unary-expression(++ 一元表达式)
-- unary-expression(-- 一元表达式)
unary-operator cast-expression(单目运算符 强制类型转换表达式)
sizeof unary-expression(sizeof 一元表达式)
sizeof ( type-name ) ( sizeof ( 类型名 ) )
(6.5.3)unary-operator(单目运算符): one of
& * + - ~ !
(6.5.4)cast-expression(强制类型转换表达式):
unary-expression(一元表达式)
( type-name ) cast-expression( ( 类型名 ) 强制类型转换表达式 )
(6.5.5)multiplicative-expression(乘法表达式):
cast-expression(强制类型转换表达式)
multiplicative-expression * cast-expression(乘法表达式 * 强制类型转换表达式)
multiplicative-expression / cast-expression(乘法表达式 / 强制类型转换表达式)
multiplicative-expression % cast-expression(乘法表达式 % 强制类型转换表达式)
(6.5.6)additive-expression(加法表达式):
multiplicative-expression(乘法表达式)
additive-expression + multiplicative-expression(加法表达式 + 乘法表达式)
additive-expression - multiplicative-expression(加法表达式 - 乘法表达式)
(6.5.7)shift-expression(移位表达式):
additive-expression(加法表达式)
shift-expression << additive-expression(移位表达式 << 加法表达式)
shift-expression >> additive-expression(移位表达式 >> 加法表达式)
(6.5.8)relational-expression(关系表达式):
shift-expression(移位表达式)
relational-expression < shift-expression(关系表达式 < 移位表达式)
relational-expression > shift-expression(关系表达式 > 移位表达式)
relational-expression <= shift-expression(关系表达式 <= 移位表达式)
relational-expression >= shift-expression(关系表达式 >= 移位表达式)
(6.5.9)equality-expression(相等表达式):
relational-expression(关系表达式)
equality-expression == relational-expression(相等表达式 == 关系表达式)
equality-expression != relational-expression(相等表达式 != 关系表达式)
(6.5.10)AND-expression(按位与表达式):
equality-expression(相等表达式)
AND-expression & equality-expression(按位与表达式 & 相等表达式)
(6.5.11)exclusive-OR-expression(按位异或表达式):
AND-expression(按位与表达式)
exclusive-OR-expression ^ AND-expression(按位异或表达式 ^ 按位与表达式)
(6.5.12)inclusive-OR-expression(按位或表达式):
exclusive-OR-expression(按位异或表达式)
inclusive-OR-expression | exclusive-OR-expression(按位或表达式 | 按位异或表达式)
(6.5.13)logical-AND-expression(逻辑与表达式):
inclusive-OR-expression(按位或表达式)
logical-AND-expression && inclusive-OR-expression(逻辑与表达式 && 按位或表达式)
(6.5.14)logical-OR-expression(逻辑或表达式):
logical-AND-expression(逻辑与表达式)
logical-OR-expression || logical-AND-expression(逻辑或表达式 || 逻辑与表达式)
(6.5.15)conditional-expression(条件表达式):
logical-OR-expression(逻辑或表达式)
logical-OR-expression ? expression : conditional-expression(逻辑或表达式 ? 表达式 : 条件表达式)
(6.5.16)assignment-expression(赋值表达式):
conditional-expression(条件表达式)
unary-expression assignment-operator assignment-expression(一元表达式 赋值运算符 赋值表达式)
(6.5.16)assignment-operator(赋值运算符): one of
= *= /= %= += -= <<= >>= &= ^= |=
(6.5.17)expression(表达式):
assignment-expression(赋值表达式)
expression , assignment-expression(表达式 , 赋值表达式)
(6.6)constant-expression(常量表达式):
conditional-expression(条件表达式)
A.2.2 声明(Declarations)
(6.7)declaration(声明):
declaration-specifiers init-declarator-listopt ;(声明说明符 初始化声明符列表可选)
(6.7)declaration-specifiers(声明说明符):
storage-class-specifier declaration-specifiersopt(存储类型说明符 声明说明符可选)
type-specifier declaration-specifiersopt(类型说明符 声明说明符可选)
type-qualifier declaration-specifiersopt(类型限定符 声明说明符可选)
function-specifier declaration-specifiersopt(函数说明符 声明说明符可选)
(6.7)init-declarator-list(初始化声明符列表):
init-declarator(初始化声明符)
init-declarator-list , init-declarator(初始化声明符列表 , 初始化声明符)
(6.7)init-declarator(初始化声明符):
declarator(声明符)
declarator = initializer(声明符 = 初始设定式)
(6.7.1)storage-class-specifier(存储类型说明符):
typedef
extern
static
auto
register
(6.7.2)type-specifier(类型说明符):
void
char
short
int
long
float
double
signed
unsigned
_Bool
_Complex
_Imaginary
struct-or-union-specifier(结构或联合说明符)
enum-specifier(枚举说明符)
typedef-name(定义类型名)
(6.7.2.1)struct-or-union-specifier(结构或联合说明符):
struct-or-union identifieropt { struct-declaration-list }(结构或联合 标识符可选 { 结构声明列表 })
struct-or-union identifier(结构或联合 标识符)
(6.7.2.1)struct-or-union(结构或联合):
struct
union
(6.7.2.1)struct-declaration-list(结构声明列表):
struct-declaration(结构声明)
struct-declaration-list struct-declaration(结构声明列表 结构声明)
(6.7.2.1)struct-declaration(结构声明):
specifier-qualifier-list struct-declarator-list ;(说明符限定符列表 结构声明符列表 ;)
(6.7.2.1)specifier-qualifier-list(说明符限定符列表):
type-specifier specifier-qualifier-listopt(类型说明符 说明符限定符列表可选)
type-qualifier specifier-qualifier-listopt(类型限定符 说明符限定符列表可选)
(6.7.2.1)struct-declarator-list(结构声明符列表):
struct-declarator(结构声明符)
struct-declarator-list , struct-declarator(结构声明符列表 , 结构声明符)
(6.7.2.1)struct-declarator(结构声明符):
declarator(声明符)
declaratoropt : constant-expression(声明符可选 : 常量表达式)
(6.7.2.2)enum-specifier(枚举说明符):
enum identifieropt { enumerator-list }(enum 标识符可选 { 枚举数列表 })
enum identifieropt { enumerator-list , }(enum 标识符可选 { 枚举数列表 , })
enum identifier(enum 标识符)
(6.7.2.2)enumerator-list(枚举数列表):
enumerator(枚举数)
enumerator-list , enumerator(枚举数列表 , 枚举数)
(6.7.2.2)enumerator(枚举数):
enumeration-constant(枚举常量)
enumeration-constant = constant-expression(枚举常量 = 常量表达式)
(6.7.3)type-qualifier(类型限定符):
const
restrict
volatile
(6.7.4)function-specifier(函数说明符):
inline
(6.7.5)declarator(声明符):
pointeropt direct-declarator(指针可选 直接声明符)
(6.7.5)direct-declarator(直接声明符):
identifier(标识符)
( declarator )( ( 声明符 ) )
direct-declarator [ type-qualifier-listopt assignment-expressionopt ](直接声明符 [ 类型限定符列表可选 赋值表达式可选 ])
direct-declarator [ static type-qualifier-listopt assignment-expression ](直接声明符 [ static 类型限定符列表可选 赋值表达式 ])
direct-declarator [ type-qualifier-list static assignment-expression ](直接声明符 [ 类型限定符列表 static 赋值表达式 ])
direct-declarator [ type-qualifier-listopt * ](直接声明符 [ 类型限定符列表可选 * ])
direct-declarator ( parameter-type-list )(直接声明符 ( 形参类型列表 ))
direct-declarator ( identifier-listopt )(直接声明符 ( 标识符列表可选 ))
(6.7.5)pointer(指针):
* type-qualifier-listopt(* 类型限定符列表可选)
* type-qualifier-listopt pointer(* 类型限定符列表可选 指针)
(6.7.5)type-qualifier-list(类型限定符列表):
type-qualifier(类型限定符)
type-qualifier-list type-qualifier(类型限定符列表 类型限定符)
(6.7.5)parameter-type-list(形参类型列表):
parameter-list(形参列表)
parameter-list , …(形参列表 , …)
(6.7.5)parameter-list(形参列表):
parameter-declaration(形参声明)
parameter-list , parameter-declaration(形参列表 , 形参声明)
(6.7.5)parameter-declaration(形参声明):
declaration-specifiers declarator(声明说明符 声明符)
declaration-specifiers abstract-declaratoropt(声明说明符 抽象声明符可选)
(6.7.5)identifier-list(标识符列表):
identifier(标识符)
identifier-list , identifier(标识符列表 , 标识符)
(6.7.6)type-name(类型名):
specifier-qualifier-list abstract-declaratoropt(说明符限定符列表 抽象声明符可选)
(6.7.6)abstract-declarator(抽象声明符):
pointer(指针)
pointeropt direct-abstract-declarator(指针可选 直接抽象声明符)
(6.7.6)direct-abstract-declarator(直接抽象声明符):
( abstract-declarator )( ( 抽象声明符 ) )
direct-abstract-declaratoropt [ assignment-expressionopt ](直接抽象声明符可选 [ 赋值表达式可选 ])
direct-abstract-declaratoropt [*](直接抽象声明符可选 [*])
direct-abstract-declaratoropt ( parameter-type-listopt )(直接抽象声明符可选 ( 形参类型列表可选 ))
(6.7.7)typedef-name(定义类型名) :
identifier(标识符)
(6.7.8)initializer(初始设定式):
assignment-expression(赋值表达式)
{ initializer-list }({ 初始化表达式 })
{ initializer-list , }({ 初始化表达式 , })
(6.7.8)initializer-list(初始化列表):
designationopt initializer(指定可选 初始设定式)
initializer-list , designationopt initializer(初始化列表 , 指定可选 初始设定式)
(6.7.8)designator-list(指定符列表):
designator(指定符)
designator-list designator(指定符列表 指定符)
(6.7.8)designator(指定符):
[ constant-expression ]([ 常量表达式 ])
. identifier( . 标识符 )
A.2.3 语句(Statements)
(6.8)statement(语句):
labeled-statement(标号语句)
compound-statement(复合语句)
expression-statement(表达式语句)
selection-statement(选择语句)
iteration-statement(循环语句)
jump-statement(跳转语句)
(6.8.1)labeled-statement(标号语句):
identifier : statement(标识符 : 语句)
case constant-expression : statement(case 常量表达式 : 语句)
default : statement(default : 语句)
(6.8.2)compound-statement(复合语句):
{ block-item-listopt }( { 块项目列表可选 } )
(6.8.2)block-item-list(块项目列表):
block-item(块项目)
block-item-list block-item(块项目列表 块项目)
(6.8.2)block-item(块项目):
declaration(声明)
statement(语句)
(6.8.3)expression-statement(表达式语句):
expressionopt ;( 表达式可选 ; )
(6.8.4)selection-statement(选择语句):
if ( expression ) statement(if ( 表达式 ) 语句)
if ( expression ) statement else statement(if ( 表达式 ) 语句 else 语句)
switch ( expression ) statement(switch ( 表达式 ) 语句)
(6.8.5)iteration-statement(循环语句):
while ( expression ) statement(while ( 表达式 ) 语句)
do statement while ( expression ) ;(do 语句 while ( 表达式 ) ;)
for ( expressionopt ; expressionopt ; expressionopt ) statement(for ( 表达式可选 ; 表达式可选 ; 表达式可选 ) 语句)
for ( declaration expressionopt ; expressionopt ) statement(for ( 声明 表达式可选 ; 表达式可选 ) 语句)
(6.8.6)jump-statement(跳转语句):
goto identifier ;(goto 标识符 ;)
continue ;
break ;
return expressionopt ;(return 表达式可选 ;)
A.2.4 (外部定义)External definitions
(6.9)translation-unit(翻译单元):
external-declaration(外部声明)
translation-unit external-declaration(翻译单元 外部声明)
(6.9)external-declaration(外部声明):
function-definition(函数定义)
declaration(声明)
(6.9.1)function-definition(函数定义):
declaration-specifiers declarator declaration-listopt compound-statement(声明说明符 声明符 声明列表可选 复合语句)
(6.9.1)declaration-list(声明列表):
declaration(声明)
declaration-list declaration(声明列表 声明)
A.3 (预处理指令)Preprocessing directives
(6.10)preprocessing-file(预处理文件):
groupopt(组可选)
(6.10)group(组):
group-part(组部分)
group group-part(组 组部分)
(6.10)group-part(组部分):
if-section(if段)
control-line(控制行)
text-line(文本行)
# non-directive(# 非指令)
(6.10) if-section(if段):
if-group elif-groupsopt else-groupopt endif-line(if组 elif群组可选 else组可选 endif行)
(6.10) if-group(if组):
# if constant-expression new-line groupopt(# if 常量表达式 新行 组可选)
# ifdef identifier new-line groupopt(# ifdef 标识符 新行 组可选)
# ifndef identifier new-line groupopt(# ifndef 标识符 新行 组可选)
(6.10)elif-groups(elif群组):
elif-group(elif组)
elif-groups elif-group(elif群组 elif组)
(6.10)elif-group(elif组):
# elif constant-expression new-line groupopt(# elif 常量表达式 新行 组可选)
(6.10)else-group(else组):
# else new-line groupopt(# else 新行 组可选)
(6.10)endif-line(endif行):
# endif new-line(# endif 新行)
(6.10)control-line(控制行):
# include pp-tokens new-line(# include pp符号 新行)
# define identifier replacement-list new-line(# define 标识符 置换列表 新行)
# define identifier lparen identifier-listopt ) replacement-list new-line(# define 标识符 左圆括号 标识符列表可选 置换列表 新行)
# define identifier lparen … ) replacement-list new-line(# define 标识符 左圆括号 … ) 置换列表 新行)
# define identifier lparen identifier-list , … ) replacement-list new-line(# define 标识符 左圆括号 标识符列表 , … ) 置换列表 新行)
# undef identifier new-line(# undef 标识符 新行)
# line pp-tokens new-line(# line pp符号 新行)
# error pp-tokensopt new-line(# error pp符号可选 新行)
# pragma pp-tokensopt new-line(# pragma pp符号可选 新行)
# new-line(# 新行)
(6.10)text-line(文本行):
pp-tokensopt new-line(pp符号可选 新行)
(6.10)non-directive(非指令):
pp-tokens new-line(pp符号 新行)
(6.10)lparen(左圆括号):
a ( character not immediately preceded by white-space(一个 ( 字符,前面没有空白)
(6.10)replacement-list(置换列表):
pp-tokensopt(pp符号可选)
(6.10)pp-tokens(pp符号):
preprocessing-token(预处理符号)
pp-tokens preprocessing-token(pp符号 预处理符号)
(6.10)new-line(新行):
the new-line character(新行符)