C语言函数调用方式分享
在C语言中函数的调用非常实用,如何调用函数成为常见的问题。大家知道C语言函数调用方式吗?
通常在使用VC进行函数定义时会指定该函数调用方式,诸如:
int __stdcall max(int a, int b)
{
return a>b?a:b;
}
int __cdecl min(int a, int b)
{
return a
}
bool __fastcall equal(int a, int b)
{
return a=b?true:false;
}
首先,让我们来分个类,调用方法分为两大类另加一个较特殊的__thiscall.
第一类:__stdcall类 别名:WINAPI,CALLBACK,PASCAL。该类特点是:主调函数负责参数入栈,由函数本身负责栈的恢复。
第二类:__cdecl类 别名:C/C++中默认调用方式,若你定义函数未指定函数调用约定(Calling
Conventions),例如在VC6中下面两个函数的调用约定是等价的:
int max(int a, int b)
{
return a>b?a:b;
}
int __cdecl min(int a, int b)
{
return a
}
该类调用约定的特点是:由主调函数负责参数入栈,并由主调函数负责线的恢复。
第三类:__thiscall
该类比较特殊,只用于类成员函数调用,你甚至不能强制指定这个函数调用约定。它是由C/C++编译器自动添加的。在C/C++中类成员函数会默认传入一个this指针,对于此,在默入情况下,C/C++中类成员函数通过此类调用约定来指定this指针。
接着介绍一下__thiscall,__thiscall是关于类的一种调用方式。
它与其他调用方式的最大区别是:
__thiscall对每个函数都增加了一个类指针参数
class aa
{
void bb(int cc);
};
实际上bb的函数原形是void bb(aa &this, int cc);
__cdecl的调用方式介绍: C和C++缺省调用方式