我已经学习C大约一年了,而当我只是在玩耍时,我在上面遇到了这个问题。我首先认为这可能是分配优先级的情况(即x = 10首先发生),但是后来我尝试了
printf("%d %d %d", x==5, x=10, x<6);
,它输出
0 10 1
。有人可以向我解释为什么/会发生什么,因为这似乎让我非常困惑,而且我开始认为这可能是不确定的行为?
答案 0 :(得分:2)
这确实是未定义的行为。函数的参数按未指定的顺序求值,因此依赖该顺序的所有操作都将成为UB。
看起来您的编译器从右到左(至少在这种情况下)。这是一种合理的方法。但是由于它是UB,所以不要指望它总是这样做。