C++的函数调用规定

C++中的函数调用约定涉及参数传递方式、栈指针恢复和名称修饰。stdcall从右向左压栈,调用者恢复栈,函数名带@参数尺寸;cdecl默认约定,右向左压栈,调用者恢复栈,函数名加下划线;fastcall前两个参数用ecx,edx,被调用者恢复栈,函数名@参数尺寸;this_call用于类成员函数,this指针通过ecx传递,参数处理方式根据个数确定。" 8643706,1371949,全排列算法详解:递归与非递归实现,"['算法', 'C++', '程序设计方法', '程序员', '校园招聘']
摘要由CSDN通过智能技术生成

C++中的函数调用一般针对三个问题:
1、参数传递的方式(是否采用寄存器传递参数、采用哪个寄存器传递参数、参数压桟的顺序等)
参数的传递方式,最常见的是通过栈传递。函数的调用方将参数压入栈中,函数自己再从栈中将参数取出。
对于有多个参数的函数,调用惯例要规定函数调用方将参数压栈的顺序,是从左往右还是从右往左。有些调用惯例还允许使用寄存器传递参数。
2、函数调用结束后的栈指针由谁恢复(被调用的函数恢复还是调用者恢复)
栈的维护方式:在函数将参数压栈之后,函数体 会被调用,此后需要将被压入的参数全部弹出,以使得栈在函数调用前后保持一致。这个弹出工作可以由函数的调用方来完成,也可以由函数本身完成。
3、函数编译后的名称;
名称修饰策略,为了链接的时候对调用惯例进行区分,调用惯例要对函数本身的名字进行修饰。不同的调用惯例有不同的名字修饰策略。

下面对几个经常使用的函数调用规则进行解释:

_stdcall

stdcall是standard call的缩写,也被称为pascal调用约定,因为pascal使用的函数调用约定就是stdcall。
使用stdcall的函数声明方式为:int _stdcall function(int a,int b)
stdcall的调用约定意味着:
1)采用桟传递全部参数,参数从右向左压入栈;
2)被调用函数负责恢复栈顶指针 ;
3) 函数名自动加前导的下划线,后面是函数名,之后紧跟一个@符号,其后紧跟着参数的尺寸,例如_TestFun@1&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值