小编bed*_*han的帖子

此 C 代码会导致未定义行为吗?

我知道:

int b = 1, c = 2, d = 3, e = 4;
printf("%d %d %d", ++b, b, b++);
Run Code Online (Sandbox Code Playgroud)

导致未定义的行为。自从

在两个序列点之间多次修改任何对象是 UB。 未定义的行为和序列点

但我不知道是否:

int b = 1, c = 2, d = 3, e = 4;
printf("%d", b++ + ++c - --d - e--);
Run Code Online (Sandbox Code Playgroud)

也是UB吗?

我认为递增/递减运算符将首先评估,因为它们之间的优先级从右到左,因为 associativity 。然后算术运算符将从左到右计算。

这将是

(b) + (c + 1) - (d - 1) - (e)

即 1 + (2 + 1) - (3 - 1) - (4)

= (2 - 4)

= -2 …

c operator-precedence undefined-behavior sequence-points

0
推荐指数
1
解决办法
106
查看次数