C 调用约定和 C++调用约定

本文详细介绍了C语言的__cdecl和C++的__stdcall调用约定的区别。__cdecl调用约定中,参数从右向左压栈,调用者负责清理堆栈;而__stdcall调用约定则相反,参数同样从右向左压栈,但由被调用者清理堆栈。Windows API通常使用__stdcall约定,而C/C++的默认调用约定是__cdecl。
摘要由CSDN通过智能技术生成

函数的调用约定

常用的 有两种:__stdcall 和 __cdecl 

主要区别在于调用方式和对堆栈的处理不同。

__stdcall:C++调用方式和函数导出方式。

__cdecl : C调用方式和导出方式。


具体:

cdecl调用约定:
cdecl调用约定又称为C调用约定,是C语言缺省的调用约定,它的定义语法是:
int function (int a ,int b) //不加修饰就是C调用约定
int __cdecl function(int a,int b)//明确指出C调用约定
cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。

stdcall调用约定:
Microsoft C++系列的C/C++编译器中,常常用PASCAL宏来声明这个调用约定,类似的宏还有WINAPICALLBACK
stdcall调用约定声明的语法为
int __stdcall function(int a,int b)
stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。

注意不同编译器会插入自己的汇编代码以提供编译的通用性,但是大体代码如此。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值