调用约定:_stdcall,_cdecl
2016-05-18 19:46
375 查看
1、_stdcall
[b]_stdcall是[/b]函数调用约定的一种,通常用于Win32 API中,函数调用约定主要约束了两件事:
①参数传递顺序: 参数从右向左压入堆栈
②调用堆栈由谁(调用函数或被调用函数)清理: 函数被调用者修改堆栈
③函数名:VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。
int f(void *p) ;
_f@4(在外部汇编语言里可以用这个名字引用这个函数)
2、_cdecl
_cdecl是C和C++程序的缺省调用方式。
①按从右至左的顺序压参数入栈
②传送参数的内存栈是由调用者来维护的;每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。
③VC将函数编译后会在函数名前面加上下划线前缀。
3、关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。
[b]_stdcall是[/b]函数调用约定的一种,通常用于Win32 API中,函数调用约定主要约束了两件事:
①参数传递顺序: 参数从右向左压入堆栈
②调用堆栈由谁(调用函数或被调用函数)清理: 函数被调用者修改堆栈
③函数名:VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。
int f(void *p) ;
_f@4(在外部汇编语言里可以用这个名字引用这个函数)
2、_cdecl
_cdecl是C和C++程序的缺省调用方式。
①按从右至左的顺序压参数入栈
②传送参数的内存栈是由调用者来维护的;每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。
③VC将函数编译后会在函数名前面加上下划线前缀。
3、关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。
相关文章推荐
- Intent的使用
- CentOS 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)
- iOS:极光推送控制器跳转
- iOS self 和 super 学习
- 《排序算法》——归并排序,插入排序(Java)
- C++ 转换类型运算符 调用构造函数实现的类型转换
- LeetCode-Number of 1 Bits
- awk命令详解
- 出差(3~八)
- ubuntu卸载编译安装的软件
- Hbase数据解析mapreduce过程及遇到的问题
- NYOJ 623 A*B Problem II
- 图论算法总结
- 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理
- jQuery实战学习笔记(二)-用jQuery为页面添加活力
- 【Cocos Creator基础教程(其他)】——原生平台退出游戏方法
- Selenium2+JUnit+FirefoxWebDriver
- IMX6添加PCI接口的AR9580无线网卡驱动支持
- (未完成)C++ 重载赋值运算函数 operator =
- 自定义baseAdapter的比较好的一种方法