int max(int a,int b)默认返回值的问题
本帖最后由 lubyam 于 2013-10-25 17:52:12 编辑
使用的是vs2012
test.c
int max(int a,int b)
{
if(a>b)
{
return a;
}
}
-----------
int main(int argc,char *argv[])
{
int a=2;
int b=3;
int c=0;
c=max(a,b);
printf("%d",c);
}
为什么输出来的是2而不是0;
[解决办法]
c=max(a,b);
00A1403 mov eax,dword ptr [b]
000A1406 push eax
000A1407 mov ecx,dword ptr [a]
000A140A push ecx
000A140B call max (0A1109h)
000A1410 add esp,8
000A1413 mov dword ptr [c],eax
看到了吗 用俩个参数的时候压栈分别用了eax ecx
你是这样调用的 c=max(2,3);
c默认调用从右向左 这样的话
eax保存的是2
所以你换成
c=max(3,2);
返回值就是3了
专业吧 20分都给我吧 他们 都不专业 哈哈