__stdcall:参数从睁做右向左依次传递,并压入堆栈旁早圆,由被调用函数清退堆栈。该规范生成的函数代码比__cdecl更小,但当函数有可变个数参数,自动转化为__cdecl调用规范。
它们都是从右向左的。
C++函数调用有三种常见方式:thiscall,__cdecl,__stdcall今天看了篇介绍的文章,才比较清楚了点。thiscall,用于类的成员函数调用,
__thiscall对每个函数都增加了一个类指针参数
class aa
{
void bb(int cc)
}
实际上bb的函数原形是void bb(aa &this, int cc)
以前知道类的成员函数在调用时会传入一个this指针,而不晓得thiscall就是专配则门指定了这种调用方式。__cdecl调用方式即为C,C++默认的调用方式。
void Input( int &m,int &n)/*相当于void __cdecl Input(int &m,int &n)*/
其特点是:1,由主调用函数进行参数压栈并且恢复堆栈;2,在主调用函数中进行实参的压栈并且顺序是从右到左;3,由于主调用函数管理堆栈,所以可以实现变参函数。
__stdcall则是标准调用方式,实际上就是PASCAL,CALLBACK,WINAPI ,其特点是:_主调用函数中负责压栈,在被调用函数中负责d出堆栈中的参数,并且负责恢复堆栈。因此不能实现变参函数,参数传递是从右到左。另外,命名修饰方法是在函数前加一个下划线(_),在函数名后培链棚有符号(@),在@后面紧跟参数列表中的参数所占字节数(10进制),唤毕如:void Input(int &m,int &n),被修饰成:_Input@8 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)