C++中的常见函数调用约定 (__stdcall, __fastcall, __pascal, __cdecl等)
C,C++中有函数调用约定的这种说法,什么是函数调用约定呢? =》 函数调用约定主要约束了两件事情:
1. 参数传递的顺序
2. 调用堆栈由哪一方来进行清理 (调用函数还是被调用函数)来进行清理
__stdcall就是函数调用约定中的一种,__stdcall来表示:
第1点: 函数的参数是从右向左压入堆栈 (这样当函数参数出栈时,刚好是先拿到最左边的参数)
第2点: 被调用函数来负责清理堆栈,也就是说它负责清理自己在堆栈中的参数
第3点: 函数名在编译器层次会自动加前导下划线,后面紧跟着一个@符号,后面再跟着参数的尺寸(参数的字节数). 比如 函数 int func(int a, int b)的函数修饰是 _func@8
在win32应用程序中,宏 APIENTRY, WINAPI 都表示 _stdcall, 非常常见, 比如 #define WINAPI _stdcall