<分区>
我已经学习了大约一年的 C,并且在我只是玩弄时遇到了上面的问题。我首先想到可能是赋值优先的情况(即 x=10 首先发生),但后来我尝试了
printf("%d %d %d", x==5, x=10, x<6);
它输出
0 10 1
。有人可以向我解释为什么/发生了什么吗,因为这对我来说似乎非常莫名其妙,我开始认为这可能是未定义的行为?
<分区>
我已经学习了大约一年的 C,并且在我只是玩弄时遇到了上面的问题。我首先想到可能是赋值优先的情况(即 x=10 首先发生),但后来我尝试了
printf("%d %d %d", x==5, x=10, x<6);
它输出
0 10 1
。有人可以向我解释为什么/发生了什么吗,因为这对我来说似乎非常莫名其妙,我开始认为这可能是未定义的行为?
最佳答案
这确实是未定义的行为。函数的参数以未指定的顺序求值,因此执行任何依赖于该顺序的操作都会成为 UB。
看起来你的编译器是从右到左的(至少在这个例子中是这样)。这是一种合理的方法。但由于它是 UB,所以不要指望它总是这样做。
关于c - 为什么 "int x = 5; printf("%d %d %d", x==5, x=10, x==5) ;"in C print "0 10 0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56086241/