根据C语言标准(以及K&R)逗号运算符的语法如下:
expression:
assignment-expression
expression, assignment-expression
但是为什么这个语句有效呢?
5+5, 1+1;
5+5和1+1不是赋值表达式,但C标准要求逗号运算符的操作数必须是赋值表达式。
根据C语言标准(以及K&R)逗号运算符的语法如下:
expression:
assignment-expression
expression, assignment-expression
5+5, 1+1;
5+5和1+1不是赋值表达式,但C标准要求逗号运算符的操作数必须是赋值表达式。
赋值表达式
⊃ 条件表达式
⊃ 逻辑或表达式
⊃ 逻辑与表达式
⊃ 按位或表达式
⊃ 按位异或表达式
⊃ 按位与表达式
⊃ 相等性表达式
⊃ 关系表达式
⊃ 移位表达式
⊃ 加法表达式
,最终是 ⊃ 加法表达式 + 乘法表达式
。赋值表达式
。
⊃
是“包含”关系。一开始定义 C 语法的方式可能并不明显。
首先,让我们看一下 assignment-expression
的定义:
(6.5.16) assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-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
这样的表达式。