为什么“ int x = 5; printf(“%d%d%d”,x == 5,x = 10,x == 5);”在C打印“ 0 10 0”?

时间:2019-05-11 00:23:08

标签: c printf undefined-behavior

我已经学习C大约一年了,而当我只是在玩耍时,我在上面遇到了这个问题。我首先认为这可能是分配优先级的情况(即x = 10首先发生),但是后来我尝试了

printf("%d %d %d", x==5, x=10, x<6);

,它输出 0 10 1。有人可以向我解释为什么/会发生什么,因为这似乎让我非常困惑,而且我开始认为这可能是不确定的行为?

1 个答案:

答案 0 :(得分:2)

这确实是未定义的行为。函数的参数按未指定的顺序求值,因此依赖该顺序的所有操作都将成为UB。

看起来您的编译器从右到左(至少在这种情况下)。这是一种合理的方法。但是由于它是UB,所以不要指望它总是这样做。