j的值
为什么这段代码在Liunx上编译出的j值是15,在vc2010学习版上面编译的是20,在Dev-C++上面编译的是19#include <stdio.h>int main()
{
int i = 1;
int j = ++i + i++ + ++i + ++i + i++;
printf("j = %d\n",j);
return 0;
}
++ -- 在不同的编译器下得到的结果不一定一样。所以++ --不建议混用。
就好比不同的人对同一个事物看法不一定一样的道理。 我手算是18,用手机c4droid算出来的也是18。 ba21 发表于 2020-2-11 12:06
++ -- 在不同的编译器下得到的结果不一定一样。所以++ --不建议混用。
就好比不同的人对同一个事物看法不 ...
那答案到底是多少呢 召唤风云 发表于 2020-2-11 12:07
我手算是18,用手机c4droid算出来的也是18。
我更迷了 枫叶007 发表于 2020-2-11 12:10
那答案到底是多少呢
不是说了值不同,还要怎么说?我说1000你要不要 枫叶007 发表于 2020-2-11 12:10
那答案到底是多少呢
我觉得答案就是你用什么编译器,答案就是什么编译器的结果 0040DEE8 C7 45 FC 01 00 00 00 mov dword ptr ,1 i=1
15: int j = ++i + i++ + ++i + ++i + i++;
0040DEEF 8B 45 FC mov eax,dword ptr
0040DEF2 83 C0 01 add eax,1 //eax=1+1
0040DEF5 89 45 FC mov dword ptr ,eax //ebp-4=2
0040DEF8 8B 4D FC mov ecx,dword ptr //ecx=2
0040DEFB 03 4D FC add ecx,dword ptr //ecx=2+2=4
0040DEFE 8B 55 FC mov edx,dword ptr //edx=2
0040DF01 83 C2 01 add edx,1 //edx=2+1=3
0040DF04 89 55 FC mov dword ptr ,edx //ebp-4=3
0040DF07 03 4D FC add ecx,dword ptr //ecx=4+3=7
0040DF0A 8B 45 FC mov eax,dword ptr //eax=3
0040DF0D 83 C0 01 add eax,1 //eax=3+1=4
0040DF10 89 45 FC mov dword ptr ,eax //ebp-4=4
0040DF13 03 4D FC add ecx,dword ptr //ecx=7+4 =11
0040DF16 03 4D FC add ecx,dword ptr //ecx=11+4
0040DF19 89 4D F8 mov dword ptr ,ecx //ebp-8=15
0040DF1C 8B 4D FC mov ecx,dword ptr
0040DF1F 83 C1 01 add ecx,1
0040DF22 89 4D FC mov dword ptr ,ecx
0040DF25 8B 55 FC mov edx,dword ptr
0040DF28 83 C2 01 add edx,1
0040DF2B 89 55 FC mov dword ptr ,edx
16: printf("j = %d\n",j);
0040DF2E 8B 45 F8 mov eax,dword ptr
0040DF31 50 push eax
0040DF32 68 1C 30 42 00 push offset string "j = %d\n" (0042301c)
0040DF37 E8 B4 32 FF FF call printf (004011f0)
0040DF3C 83 C4 08 add esp,8
这个是vc6反编译的情况
int i = 1;
002269F8mov dword ptr ,1
int j = ++i + i++ + ++i + ++i + i++;
002269FFmov eax,dword ptr // eax=1
00226A02add eax,1 // eax=1+1=2
00226A05mov dword ptr ,eax //ebp-8=2
00226A08mov ecx,dword ptr //ecx=2
00226A0Badd ecx,1 //ecx=2+1=3
00226A0Emov dword ptr ,ecx //ebp-8=3
00226A11mov edx,dword ptr //edx=3
00226A14add edx,1 //edx=3+1=4
00226A17mov dword ptr ,edx //ebp-8=4
00226A1Amov eax,dword ptr //eax=4
00226A1Dadd eax,dword ptr //eax=4+4=8
00226A20add eax,dword ptr //eax=8+4=12
00226A23add eax,dword ptr //eax=12+4=16
00226A26add eax,dword ptr //eax=16+4=20
00226A29mov dword ptr ,eax// ebp-14=20
00226A2Cmov ecx,dword ptr
00226A2Fadd ecx,1
00226A32mov dword ptr ,ecx
00226A35mov edx,dword ptr
00226A38add edx,1
00226A3Bmov dword ptr ,edx
printf("j = %d\n", j);
00226A3Emov eax,dword ptr
printf("j = %d\n", j);
00226A41push eax
00226A42push 228FF0h
00226A47call 00221050
00226A4Cadd esp,8
这个是vs2017反编译的计算结果
综上,我觉得这个是编译器的问题,你问哪个才是结果,我个人觉得vc6是我们理解的那种
枫叶007 发表于 2020-2-11 12:10
那答案到底是多少呢
不是说了吗,这类问题没有正确答案
页:
[1]