c语言之函数调用约定

1 前言

在C和C++编程中,函数调用约定(Calling Convention)定义了函数参数如何传递、由谁负责清理栈(如果有的话)、以及返回值如何传递等规则。不同的平台和编译器可能采用不同的调用约定。以下是一些常见的调用约定及其特点的详细说明:

2 __cdecl

  • 定义与特点:
    __cdecl是C语言默认的调用约定,在C++中也可使用,但不是类成员函数的默认调用约定。
    参数从右向左压入堆栈。
    调用者负责清理堆栈,这意味着调用者需要知道传递了多少参数,并据此调整堆栈指针。
    支持可变参数列表的函数(如printf)必须使用此调用约定。
    函数名在编译后通常不会改变(尽管在某些编译器中可能会添加前缀,如下划线)。
  • 适用场景:
    C语言编写的程序。
    在Windows上用于一些API函数(尽管Windows API主要使用__stdcall)。
    需要实现可变参数列表的函数。

3 __stdcall

  • 定义与特点:
    __stdcall是Windows API中广泛使用的调用约定。
    参数也是从右向左压入堆栈,但与被调用者(callee)负责清理堆栈的__cdecl不同,__stdcall由被调用者清理堆栈。
    函数名在编译时会加上一个特定的后缀(如“_”前缀和参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值