Mrliu 发表于 2018-1-8 17:39

++a*++a

今天在群里看到一个问题,
int a = 1,b;
b = ++a*++a;
printf("%d",b);
VC6.0输出9
其他编译器输出6.
有大佬解释一下嘛?{:1_918:}

shiguang2015 发表于 2018-1-10 19:37

这个不必纠结,不同编译器下,结果肯定有差异。

苏紫方璇 发表于 2018-1-8 18:01

本帖最后由 苏紫方璇 于 2018-1-8 18:09 编辑

从反汇编里看就一目了然了
012317BCmov         eax,dword ptr
012317BFadd         eax,1
012317C2mov         dword ptr ,eax
012317C5mov         ecx,dword ptr
012317C8add         ecx,1
012317CBmov         dword ptr ,ecx
012317CEmov         edx,dword ptr
012317D1imul      edx,dword ptr
012317D5mov         dword ptr ,edx

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

唉,不纠结了😂😂😂😂应该是编译标准不一样,谢谢各位。
页: [1]
查看完整版本: ++a*++a