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

问题描述

我知道:

int b = 1,c = 2,d = 3,e = 4;
printf("%d %d %d",++b,b,b++);

导致未定义的行为。由于

在两个序列点之间多次修改任何对象是 UB。 Undefined behavior and sequence points

但我不知道:

int b = 1,e = 4;
printf("%d",b++ + ++c - --d - e--);

也是UB吗?

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

就是这样

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

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

= (2 - 4)

= -2

对吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)