小甲鱼视频疑问?!
在C语言第二章第5节视频第15分钟左右的视频中,所讲的逗号运算怎么和我编译的不一样?他是取右边的b+c复制给y.
我的编译器怎么是取最左边的表达式给y?
什么原因?求解答
兄弟你注意一下运算符的优先级 就能知道是怎么回事了希望对你有帮助:loveliness::loveliness::loveliness:
那我的答案是y=6,x=6啊??
怎么回事情啊? int a=2,b=4,c=6,x,y;
00CD162Emov dword ptr ,2
00CD1635mov dword ptr ,4
00CD163Cmov dword ptr ,6
y=(x=a+b),(b+c);
00CD1643mov eax,dword ptr
00CD1646add eax,dword ptr
00CD1649mov dword ptr ,eax
00CD164Cmov ecx,dword ptr
00CD164Fmov dword ptr ,ecx
printf("y=%d,x=%d",y,x);
00CD1652mov esi,esp
00CD1654mov eax,dword ptr
00CD1657push eax
00CD1658mov ecx,dword ptr
00CD165Bpush ecx
printf("y=%d,x=%d",y,x);
00CD165Cpush 0CD6910h
00CD1661call dword ptr ds:
00CD1667add esp,0Ch
00CD166Acmp esi,esp
00CD166Ccall __RTC_CheckEsp (0CD1163h)
return 0;
00CD1671xor eax,eax
看了下汇编,好像b+c 编译器没去理会哦
我的是vs2012 ,同学在vc6下去试试看,看下反汇编
编译器理解b+c相当于是个空语句了
也确实是啊,b+c的结果都不需要了,如果编译器编译进去了,那这个发明编译器的人就是有点问题了
只是让cpu做了下b+c然后,啥都没干 那就是说小甲鱼的视频说的不对? 小甲鱼用的估计是vc6吧,编译器有出入的,vc6的同学大伙看下反汇编 我用的就是6.0的哦! 甲鱼兄的视频是将(x=a+b)作为表达式1、(b+c)当做表达式2,所以y最后会等于表达式2的值,而您的编译器直接将y=(x=a+b)当做表达式1的值,所以是表达式1的值了。不过甲鱼兄的视频确实有一点问题,因为按照标准的优先级来说,逗号运算符属于最低优先级,比=还要低,所以进行左边的赋值一般应该是正确的。 那问问甲鱼哥是不是他说错了!!!! 支持楼主谢谢分享 拿来看看咯 拿来看看咯 拿来看看咯
页:
[1]