函数返回值
来源:互联网 发布:财经直播间源码 编辑:程序博客网 时间:2024/05/09 08:23
int Count()
{
int i,j;
i=100;
j=200;
return i+j;
}
测试函数:
void Test()
{
int k=Count();
printf("/n k[%d]/n");
}
C/C++的函数返回值一般是放在寄存器eax里的,而不是在栈里。
你的这一句int k = Count()的汇编语句就是这样:
mov [esp - 4], eax //eax里是300,esp - 4是局部变量k的位置
你可以在vc里做个实验:
int add(int a, int b)
{
__asm {
mov eax,a // 把参数1存入eax
add eax,b // eax += 参数2, 结果在eax里
}
}
int main()
{
printf("%d/n", add(3, 4));
return 0;
}
楼主需要了解下寄存器这一概念,我就不把C/C++函数的汇编代码给发出来了。
还有在汇编层面来看,函数的返回值根本就没有定论,函数可以通过多种方式返回。保存返回值在eax里只是C/C++的一个约定而已。
返回值可以放在栈里,但你在C的语言层面上可能做不到,其实随着函数的结束,mov esp, ebp这条指令过后,函数内部的局部变量就报废了。如果你之后没改变过栈的内容,你可以用栈来存返回值,但比起用寄存器来存储,存储和读取要慢的多。
自己突发奇想在vc下试了下用栈“返回”值,写了段代码:
#include <stdio.h>
void __declspec(naked) __stdcall return_a_value()
{
int local;
local = 1990; // 栈空间
__asm ret
}
int main()
{
int local = 1;
return_a_value(); // 用栈返回值
printf("%d/n", local);
return 0;
}
- 函数返回值 返回引用
- 函数有多个返回值
- 函数返回值
- 函数返回值
- 函数返回值
- 函数返回值
- fork函数返回值
- 函数返回值
- 函数的返回值
- 函数返回值问题
- 函数返回值总结
- printf 函数返回值
- HRESULT 函数返回值
- 引用返回函数值
- Shell函数返回值
- recv函数返回值
- Shell 函数返回值
- 函数返回值
- 解决IIS 6.0的200KB与下载4MB的限制
- 我的BT,我的VeryCD
- packet_type数据结构
- Eclipse中tomcat关闭时的Failed shutdown of Apache Portable Runtime问题
- 由软件开发人员站街拉客所想到的
- 函数返回值
- c:forEach varStatus属性
- jsp中的时间选择器的代码(转载)
- .off 文件格式
- 希望多交朋友
- jsp中从textarea中获取数据库,然后显示时候的格式控制
- 并发与不可变性
- 用Eclipse进行C/C++开发
- 面向对象设计总则