【C++】4、函数调用约定

本文介绍了C/C++中常用的五种函数调用约定:__stdcall、__cdecl、__fastcall、__thiscall、__nakedcall,并解释了每种调用约定的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4、函数调用约定

4.1 什么是函数调用约定?

我们都知道C或者C++中,在调用函数的时候,函数的参数通过栈来传递。如果是一个参数的话非常好控制,但是如果是多个参数,就会遇到很多问题。比如:它们参数的传递顺序是什么样?它们在内存中是什么形式?栈帧是如何销毁的(调用者还是被调用者弹出)?

为了解决这些问题,引入了一个概念:函数调用约定。

4.2 常用的函数调用约定

常见的函数调用约定有这五种:__ stdcall、__ cdecl、__ fastcall、__ thiscall、__ naked call。

4.2.1 __ stdcall

stdcall是StandardCall的缩写,看见名字就知道这是C++的调用约定方式。这种方式规定所有的参数是从右向左依次入栈,如果是调用类成员方法的时候,需要将隐藏的this指针(对象的地址)作为最后一个参数入栈。当函数返回时,__ stacall采用自动清栈的方式,使用的指令是 retnX,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。由于是自动的清栈方式,必须在编译时期就确定好参数的个数。

4.2.2 __ cdecl

这个也很好区别,看见大写的c,就知道cde

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值