__cdecl、__fastcall、__stdcall是VC的三种调用规范:
调用规范决定从左至右或从右至左的参数传递,有何负责清空堆栈以及函数名称的解释
调用规范 传送顺序 堆栈清除执行者 解释风格
__cdecl 右->左 调用程序 _functionName
__fastcall 右->左 被调用程序 @functionName@nnn
__stdcall 右->左 被调用程序 _functionName@nnn
__fastcall改进了__cdecl的缺省情况,但用在所调用C函数至少有一个参数时,选中该项编译器将前两个参数送到寄存器ECX DEX,而不是用堆栈,其他参数缺省传入到__cdecl堆栈
调用规范决定从左至右或从右至左的参数传递,有何负责清空堆栈以及函数名称的解释
调用规范 传送顺序 堆栈清除执行者 解释风格
__cdecl 右->左 调用程序 _functionName
__fastcall 右->左 被调用程序 @functionName@nnn
__stdcall 右->左 被调用程序 _functionName@nnn
__fastcall改进了__cdecl的缺省情况,但用在所调用C函数至少有一个参数时,选中该项编译器将前两个参数送到寄存器ECX DEX,而不是用堆栈,其他参数缺省传入到__cdecl堆栈
__cdecl由调用者清楚参数栈,这是c,c++缺省调用模式。可以实现可变参数函数。
__cdecl是C/C++默认的函数调用方式,由调用者负责清除堆栈,因此可以实现变长参数列表。它产生的可执行体要大于__stdcall产生的可执行体。参数传递也是由右向左。
_cdecl,参数也是由右到左入栈,但由调用者清理堆栈
_fastcall intel处理器的调用方法,delphi(pascal)用的
在c/c++调用用其他的语言时,入 fortran / basic ,加extern "C" 相当如那种方式若是pascal(delphi)用_fastcall