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   新西兰程序员  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示