C标准 - 逗号操作符语法

4

根据C语言标准(以及K&R)逗号运算符的语法如下:

expression:
    assignment-expression
    expression, assignment-expression

但是为什么这个语句有效呢?
5+5, 1+1; 

5+5和1+1不是赋值表达式,但C标准要求逗号运算符的操作数必须是赋值表达式。

2个回答

5
赋值表达式条件表达式逻辑或表达式逻辑与表达式按位或表达式按位异或表达式按位与表达式相等性表达式关系表达式移位表达式加法表达式,最终是 ⊃ 加法表达式 + 乘法表达式
因此,5+5 确实属于 赋值表达式
是“包含”关系。

3
换句话说,语言正式语法中的符号必须按照语法中定义的方式进行解释。任何基于英语语言的、通过拼写暗示出来的解释都只是一个指导方针。 - John Bollinger

2

一开始定义 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 这样的表达式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接