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

 

posted on 2024-03-05 11:34  新西兰程序员  阅读(33)  评论(0编辑  收藏  举报