C语言中 int a=5,b=-3,c=4;printf("%d %d",(++a,b++,b++),b++);为什么结果是-2 -2?int a=5,b=-3,c=4;printf("%d %d",(++a,b++),b++);为什么结果就变成-3 -3?

来源:学生作业帮助网 编辑:作业帮 时间:2024/12/02 03:48:44
C语言中 int a=5,b=-3,c=4;printf(
xU[OA+ JS]h(^mĘ,K֢-VlMhiBvv'م^&9;gNiT)nJw1V r~V 6= *Ae0J cZ`ΌnӰ|_0s|SK՛TO@&gRG:[W, ?eRpBqḠŕP=pUCg>R)(ktpb|/8 1⹵LO1i쳛YYרIKHb8L>#^^2ALPvJY+=[k-.EC򽹃cV YBYX~C!SAsUfw @( ~gig(qk v}]޹ȼNߨϋd$Xw7iJm@߉QJ, ]Af8{Sr'

C语言中 int a=5,b=-3,c=4;printf("%d %d",(++a,b++,b++),b++);为什么结果是-2 -2?int a=5,b=-3,c=4;printf("%d %d",(++a,b++),b++);为什么结果就变成-3 -3?
C语言中 int a=5,b=-3,c=4;printf("%d %d",(++a,b++,b++),b++);为什么结果是-2 -2?
int a=5,b=-3,c=4;printf("%d %d",(++a,b++),b++);为什么结果就变成-3 -3?

C语言中 int a=5,b=-3,c=4;printf("%d %d",(++a,b++,b++),b++);为什么结果是-2 -2?int a=5,b=-3,c=4;printf("%d %d",(++a,b++),b++);为什么结果就变成-3 -3?
#include <stdio.h>
int main(void)
{
    int a=5,b=-3;
    
    printf("%d %d",(++a,b++),b++);
    
    return 0;
}
 
//gcc编译结果
gcc -Wall -ansi -S -o m.s main.c 
main.c: 在函数‘main’中:
main.c:9: 警告:‘b’上的运算结果可能是未定义的

andl $-16, %esp
subl $32, %esp
movl $5, 24(%esp) //a = 5
movl $-3, 28(%esp) //b = -3
movl 28(%esp), %ecx //printf最右边参数 b = -3
addl $1, 28(%esp) //b ++ b = -2
addl $1, 24(%esp) //a ++ a = 6
movl 28(%esp), %edx //printf倒数第二个参数 b = -2
addl $1, 28(%esp) //b++
movl $.LC0, %eax //准备printf参数%d %d
movl %ecx, 8(%esp) //以下是参数入栈
movl %edx, 4(%esp)//就是将ecx eax edx的值压栈
movl %eax, (%esp)
call printf //调用printf
//最后结果是 -2 -3
//不同的编译器处理是不一样的,不要写这种代码
//如果是考试题目,参考往年的题目跟着答案写,死记硬背