c - 为什么 "int x = 5; printf("%d %d %d", x==5, x=10, x==5) ;"in C print "0 10 0"?

标签 c printf undefined-behavior

我已经学习了大约一年的 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/

相关文章:

python - 发现此代码片段中的未定义行为

c++ - 在同一语句中返回传入的临时值并从中读取是否安全?

c - 为什么索引值为0时没有输出

c - 如何在 c 中使用后释放双指针?

c - 如何修复 : passing argument 1 of 'sutuntopla' makes pointer from integer without a cast warning?

c++ - C++ 的新手和 scanf 没有正确读取/打印输入

c - 避免 printf() 中的尾随零

c - 在 C 程序中,BITWISE AND 运算怎么可能比 ARITHMETIC ADDITION 运算占用更多的 CPU 时钟?

linux - 如何停止 GCC 从 obj 文件中的字符串文字中剥离尾随换行符?

c# - C# 中的行为和评估顺序