请教_cdecl 和_stdcall

talentyang 2003-10-17 02:00:13
_cdecl 和_stdcall的区别和他们的作用???
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hustzhuch 2003-10-23
  • 打赏
  • 举报
回复
__fastcall的参数传递方式不是使用堆栈而是使用寄存器,当然浮点数和结构体参数除外,这是BCB的特殊调用方式。
zoohoo 2003-10-21
  • 打赏
  • 举报
回复
想知道bcb中的__fastcall是什么意思?
xiaohyy 2003-10-19
  • 打赏
  • 举报
回复
_cdecl是由函数调用方清空堆栈
_stdcall是函数自己清空堆栈
daizh 2003-10-17
  • 打赏
  • 举报
回复
_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。

C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。

_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定。
jhyu 2003-10-17
  • 打赏
  • 举报
回复
_cdecl是C语言采用的默认调用方法,它是由主调用函数进行参数压栈并且恢复堆栈。它的优点是支持printf这样的可变参数调用。

stdcall将参数压栈是按C语言的顺序(从右到左),但与C 语言不同的是它是由被调用者将参数从栈中清除的,所以它的编译文件比_cdecl小。_stdcall是Windows API函数中默认的调用约定,VB、VFP等也采用这个约定。

另外,VC++对于两种调用方法的名称转换方法也不同。
salsfy 2003-10-17
  • 打赏
  • 举报
回复
_stdcall在vb里调用
_cdecl 在c里调用

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧