吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5801|回复: 9
收起左侧

[C&C++ 转载] ++a*++a

[复制链接]
Mrliu 发表于 2018-1-8 17:39
今天在群里看到一个问题,
int a = 1,b;
b = ++a*++a;
printf("%d",b);
VC6.0输出9
其他编译器输出6.
有大佬解释一下嘛?

免费评分

参与人数 1吾爱币 +1 收起 理由
xouou + 1 c标准未定义这种写法,所以答案都是错的

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

shiguang2015 发表于 2018-1-10 19:37
这个不必纠结,不同编译器下,结果肯定有差异。
苏紫方璇 发表于 2018-1-8 18:01
本帖最后由 苏紫方璇 于 2018-1-8 18:09 编辑

从反汇编里看就一目了然了
[Asm] 纯文本查看 复制代码
012317BC  mov         eax,dword ptr [a]  
012317BF  add         eax,1  
012317C2  mov         dword ptr [a],eax  
012317C5  mov         ecx,dword ptr [a]  
012317C8  add         ecx,1  
012317CB  mov         dword ptr [a],ecx  
012317CE  mov         edx,dword ptr [a]  
012317D1  imul        edx,dword ptr [a]  
012317D5  mov         dword ptr [b],edx  

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ubuntu + 1 + 1 我很赞同!

查看全部评分

 楼主| Mrliu 发表于 2018-1-8 17:40
杀阡陌爱花千骨 发表于 2018-1-8 17:55
6可以理解,9我也不知道怎么来的。按理来说,++在前都是先自增的,第一个参与运费的是2,第二个参与运算的是3。至于9怎么来的。真不知道,你可以加断点进行调试
610100 发表于 2018-1-8 17:57
据说执行顺序不同,具体不清楚。见过类似的
gunxsword 发表于 2018-1-8 18:32
正常人是不会写出这样的代码的,所以纠结这种问题,是浪费时间,之所以答案不同,自然是不同的编译器优化后的指令不同导致的
MXWXZ 发表于 2018-1-8 18:35
同意楼上,正常人是不会写出这种代码的。
逍遥枷锁 发表于 2018-1-8 18:58
++a不是先自增加+后再运算嘛,第一个++a不是1+1=2,a的赋值等于2,第二个++a不是2+1=3,最终a赋值变成3,再相乘等于9
 楼主| Mrliu 发表于 2018-1-10 14:57
唉,不纠结了😂😂😂😂应该是编译标准不一样,谢谢各位。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 11:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表