|
发表于 2013-10-6 22:14:33
|
显示全部楼层
本帖最后由 福禄娃娃 于 2013-10-6 22:31 编辑
DragonL915 发表于 2013-10-6 22:10
具体编译器的运算规则,怎么才能知道呢?
基本按照顺序点和副作用这两个规则来,如果有差异的话可能是编译器优化、不同处理的过程
反汇编过来就知道了
在VC或者VS中F9下个断点,然后F5调试,Alt+8查看反汇编代码
下面是反汇编代码- 5: int i = 5,j = 5,p = 0,q = 0;
- 00401028 mov dword ptr [ebp-4],5
- 0040102F mov dword ptr [ebp-8],5
- 00401036 mov dword ptr [ebp-0Ch],0
- 0040103D mov dword ptr [ebp-10h],0
- 6: p = (i++) + (i++) + (i++);
- 00401044 mov eax,dword ptr [ebp-4]
- 00401047 add eax,dword ptr [ebp-4]
- 0040104A add eax,dword ptr [ebp-4]
- 0040104D mov dword ptr [ebp-0Ch],eax
- 00401050 mov ecx,dword ptr [ebp-4]
- 00401053 add ecx,1
- 00401056 mov dword ptr [ebp-4],ecx
- 00401059 mov edx,dword ptr [ebp-4]
- 0040105C add edx,1
- 0040105F mov dword ptr [ebp-4],edx
- 00401062 mov eax,dword ptr [ebp-4]
- 00401065 add eax,1
- 00401068 mov dword ptr [ebp-4],eax
- 7: q = (++j) + (++j) + (++j);
- 0040106B mov ecx,dword ptr [ebp-8]
- 0040106E add ecx,1
- 00401071 mov dword ptr [ebp-8],ecx
- 00401074 mov edx,dword ptr [ebp-8]
- 00401077 add edx,1
- 0040107A mov dword ptr [ebp-8],edx
- 0040107D mov eax,dword ptr [ebp-8]
- 00401080 add eax,dword ptr [ebp-8]
- 00401083 mov ecx,dword ptr [ebp-8]
- 00401086 add ecx,1
- 00401089 mov dword ptr [ebp-8],ecx
- 0040108C add eax,dword ptr [ebp-8]
- 0040108F mov dword ptr [ebp-10h],eax
复制代码 |
|