函数调用约定1
来源:互联网 发布:数据质量自查报告 编辑:程序博客网 时间:2024/04/19 10:30
1、__stdcall是函数调用约定的一种,函数调用约定主要约束了两件事:
1.参数传递顺序
2.调用堆栈由谁(调用函数或被调用函数)清理
常见的函数调用约定:stdcall cdecl fastcall thiscall naked call
__stdcall表示
1.参数从右向左压入堆栈
2.函数被调用者修改堆栈
3.函数名(在编译器这个层次)自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸
在win32应用程序里,宏APIENTRY,WINAPI,都表示_stdcall,非常常见。
__stdcall自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。 int f(void *p) -->> _f@4(在外部汇编语言里可以用这个名字引用这个函数) .
2、 C调用约定(即用__cdecl关键字说明)(The C default calling convention)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数vararg的函数(如printf)只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。 _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。
- 函数调用约定1
- C语言函数调用约定1
- 函数调用约定
- 函数调用约定
- 函数调用约定
- 论函数调用约定
- 函数调用约定解析
- 论函数调用约定
- 函数调用约定
- 函数调用约定
- 论函数调用约定
- 函数调用约定解析
- 函数调用约定
- 函数调用约定
- 论函数调用约定
- 函数调用约定
- 论函数调用约定
- 论函数调用约定
- ExtJS 开发总结 (转)
- checking for forced unwind support... no cannot compute sizeof (long double)
- 使用正则表达式解析SQL语句
- XMPP服务器的SRV DNS配置
- struts2标签笔记
- 函数调用约定1
- 开始了
- 使用正则表达式解析SQL语句
- ExtJS中grid按照中文拼音首字母排序、改变行背景、列背景、静态数据分页不再困难
- 方案模板
- Linphone 的编译
- Javascript实现输入内容变化的监控通知
- 我做过的一些共享软件
- 使用正则表达式解析SQL语句