c语言,printf输出表达式,为什么第二个数是3?

新手上路,请多包涵

代码如下:

#include<stdio.h>
int main()
{
    int a = 1, b = 2, c = 3;
    printf("%d,%d,%d,%d\n", a = b = c, a = b == c, a == (b = c), a == (b == c));
    return 0;
}

输出:
图片描述

为什么第二个数是3?

阅读 2.9k
1 个回答

在C++中,函数调用表达式中函数参数的求值顺序以及任何表达式中子表达式的求值顺序都是未定义的,例如f(f1(a),f2(b),f3(c))f1(a)f2(b)f3(c)的求职顺序是未定义的,例如printf("%d,%d\n",++n,power(2,n))的结果是未定义的;相似地,因为文中printf的四个参数的执行顺序是未定义的,所以printf的结果也是未定义的,可能根据编译器的不同而不同。可以参考这里cppreferencestackoverflow