Visual C++中函数调用方式浅探

来源:互联网 发布:office mac 2013 编辑:程序博客网 时间:2024/06/07 23:17

我们知道在进行函数调用时,有几种调用方法,分为

C式

Pascal式

 

 

在C和C++中C式调用是缺省的,除非特殊声明。

二者区别:,

 

1. __cdecl 

C和C++缺省调用方式,可以省略

在C语言调用中默认的函数修饰_cdecl

总结:在C或C++语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且恢复堆栈,实参的压栈顺序是从右到左,最后由主调函数进行堆栈恢复。由于主调用函数管理堆栈,所以可以实现变参函数。

 

2.WINAPI

 (实际上就是PASCAL,CALLBACK,_stdcall)

总结:在主调用函数中负责压栈,在被调用函数中负责弹出堆栈中的参数,并且负责恢复堆栈(即所以调用前,主调函数会先压栈,然后api函数自己恢复堆栈)。因此不能实现变参函数,参数传递是从右到左。

对于大多数api函数以及窗口消息处理函数皆用 CALLBACK ,具体而言:

WINAPI一般用于修饰动态链接库中导出函数

CALLBACK仅用于修饰回调函数


原创粉丝点击