在printf(c)中,显示变量和推入堆栈的顺序是什么

在printf(c)中,显示变量和推入堆栈的顺序是什么,c,C,假设我有以下代码: #include <stdio.h> main() { int a,b,c; b=1; c=2; printf("%d\n",10,b=20,b=30,c=50,c=100); printf("%d\n",b); printf("%d\n",c); } o/p-10,20,50 b的值是怎么变成20而不是30的呢?c也是一样的?参数表达式的求值顺序和它们在堆栈上的推进是不同的 参数表达式的求值顺序在C中未指

假设我有以下代码:

#include <stdio.h>    
main()
{
   int a,b,c;
    b=1;
    c=2;

    printf("%d\n",10,b=20,b=30,c=50,c=100);
    printf("%d\n",b);
    printf("%d\n",c);
}
o/p-10,20,50
b的值是怎么变成20而不是30的呢?c也是一样的?

参数表达式的求值顺序和它们在堆栈上的推进是不同的


参数表达式的求值顺序在C中未指定。因此,可能会先计算b=20,然后计算b=30,反之亦然


在堆栈中放置参数的顺序如下:最右边的参数放在第一位。

您既有未定义的行为,也有依赖于实现的行为。i、 e.它不会工作。它与printf无关。函数参数的求值顺序取决于实现。它可以是从左到右、从右到左或任何其他顺序。它将开始从右到左推入堆栈。通常,由于printf中的顺序,+1'd,为了进一步澄清-->在堆栈中放置参数的顺序是否应该如下:最右边的参数放置在底部。这取决于ABI-有些甚至不使用堆栈,或者使用寄存器和堆栈的混合。更糟糕的是,这是在没有插入序列点的情况下对一个位置进行多个赋值,因此,这是未定义的行为。