C 标准 - 逗号运算符语法
C Standard - Comma Operator Syntax
根据 C 标准(和 K&R),逗号运算符的语法如下:
expression:
assignment-expression
expression, assignment-expression
但是为什么这个语句有效?
5+5, 1+1;
5+5 和 1+1 不是赋值表达式,但 C 标准要求赋值表达式作为逗号运算符的操作数。
assignment-expression
⊃conditional-expression
⊃logical-OR-expression
⊃logical-AND-expression
⊃inclusive-OR-expression
⊃exclusive-OR-expression
⊃AND-expression
⊃equality-expression
⊃ relational-expression
⊃ shift-expression
⊃ additive-expression
最后是 ⊃ additive-expression + multiplicative-expression
.
所以不对,5+5确实是∈assignment-expression
.
⊃ 是 "contains" 关系。
C 语法的定义方式一开始可能并不明显。
首先,让我们看看assignment-expression
是如何定义的:
(6.5.16) assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
这意味着它可以是或者 conditional-expression
或者后者的令牌组合。前者定义为:
(6.5.15) conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
最终你会遇到:
(6.5.7) shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
其中 additive-expression
对应于 1+1
.
等表达式
根据 C 标准(和 K&R),逗号运算符的语法如下:
expression:
assignment-expression
expression, assignment-expression
但是为什么这个语句有效?
5+5, 1+1;
5+5 和 1+1 不是赋值表达式,但 C 标准要求赋值表达式作为逗号运算符的操作数。
assignment-expression
⊃conditional-expression
⊃logical-OR-expression
⊃logical-AND-expression
⊃inclusive-OR-expression
⊃exclusive-OR-expression
⊃AND-expression
⊃equality-expression
⊃ relational-expression
⊃ shift-expression
⊃ additive-expression
最后是 ⊃ additive-expression + multiplicative-expression
.
所以不对,5+5确实是∈assignment-expression
.
⊃ 是 "contains" 关系。
C 语法的定义方式一开始可能并不明显。
首先,让我们看看assignment-expression
是如何定义的:
(6.5.16) assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
这意味着它可以是或者 conditional-expression
或者后者的令牌组合。前者定义为:
(6.5.15) conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
最终你会遇到:
(6.5.7) shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
其中 additive-expression
对应于 1+1
.