[C语言]小记q = (++j) + (++j) + (++j)的值
根据不同的编译器,生产的代码不一样,导致的结果也会不一样。
代码如下:
1 #include <stdio.h> 2 void main() 3 { 4 int j = 5; 5 int q; 6 q =(++j)+(++j)+(++j); 7 }
环境:win7
编译器:GCC
IDE:vc++6.0 /DEV-C++
结果:q = 22
1 6: q =(++j)+(++j)+(++j); 2 00401036 mov eax,dword ptr [ebp-8] 移动J=5到寄存器eax内 3 00401039 add eax,1 在寄存器eax值上加1,eax=6 4 0040103C mov dword ptr [ebp-8],eax 把寄存器的值移动到变量j上去,j= 6 5 0040103F mov ecx,dword ptr [ebp-8] 移动J=6到寄存器ecx 6 00401042 add ecx,1 在寄存器上ecx+1,j=6 7 00401045 mov dword ptr [ebp-8],ecx 把寄存器ecx上的值移到J上去,J=7 8 00401048 mov edx,dword ptr [ebp-8] 把J=7移动到寄存器edx=7 9 0040104B add edx,dword ptr [ebp-8] edx值+j 此时j=7,edx=7+7 10 0040104E mov eax,dword ptr [ebp-8] 把j=7Move给 第一个寄存器eax 11 00401051 add eax,1 eax再加1,此时寄存器eax=8 12 00401054 mov dword ptr [ebp-8],eax 把此时的eax的值move给 j=8 13 00401057 add edx,dword ptr [ebp-8] edx值= edx+j = 14+8 14 0040105A mov dword ptr [ebp-0Ch],edx edx值 move给 j = 22
环境:win7
编译器:GCC
IDE: VC++ 2008
运行结果:24
1 q =(++j)+(++j)+(++j); 2 003A1815 mov eax,dword ptr [j] //eax = 5,j = 5 3 003A1818 add eax,1 //eax = 6 4 003A181B mov dword ptr [j],eax j = 6 5 003A181E mov ecx,dword ptr [j] ecx = 6 6 003A1821 add ecx,1 ecx = 7 7 003A1824 mov dword ptr [j],ecx j = 7 8 003A1827 mov edx,dword ptr [j] edx = 7 9 003A182A add edx,1 edx = 8 10 003A182D mov dword ptr [j],edx j = 8 11 003A1830 mov eax,dword ptr [j] eax = 8 12 003A1833 add eax,dword ptr [j] eax = 16 13 003A1836 add eax,dword ptr [j] eax = 24 14 003A1839 mov dword ptr [q],eax
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库