为了见编译器已经代表你的代码的具体步骤,我检查拆解。
行00324C2E将全局变量“val”的值复制到CPU的eax寄存器中。
00324C33行将eax的值复制到“foo”函数的本地堆栈空间中。
00324C39行将您的全局变量“val”的值复制到CPU的ecx寄存器中。
00324C3F行将ecx寄存器中的值加1。
00324C42行将增量值从ecx寄存器复制回您的全局变量“var”。
行00324C48将存储在“foo”函数的本地堆栈空间(参见上面的行00324C33)中的值的未受影响的副本复制到CPU的eax寄存器中。它被复制到eax寄存器,因为它是返回给调用函数的值(在这种情况下为“main”)。
因此,从foo()返回0,但全局变量“val”在foo()返回后包含1。
int foo()
{
00324C10 push ebp
00324C11 mov ebp,esp
00324C13 sub esp,0C4h
00324C19 push ebx
00324C1A push esi
00324C1B push edi
00324C1C lea edi,[ebp-0C4h]
00324C22 mov ecx,31h
00324C27 mov eax,0CCCCCCCCh
00324C2C rep stos dword ptr es:[edi]
return val++;
00324C2E mov eax,dword ptr ds:[0032F320h]
00324C33 mov dword ptr [ebp-0C4h],eax
00324C39 mov ecx,dword ptr ds:[32F320h]
00324C3F add ecx,1
00324C42 mov dword ptr ds:[32F320h],ecx
00324C48 mov eax,dword ptr [ebp-0C4h]
}
'val'是一个全局变量。 – 2015-03-25 01:29:39
而不是在return语句后面想'val ++'递增'val' *,可以这样想:'val ++'将'val'的原始值保存到某个看不见的temp中,然后增加'val'中的值,然后使用不可见的temp作为“返回”值。 – WhozCraig 2015-03-25 01:45:10