当前位置:网站首页>函数调用约定
函数调用约定
2022-08-09 14:52:00 【Nicolas0311】
整理笔记的时候发现的函数调用约定笔记,但是忘了在哪看到的了。
__cdecl 是C/C++和MFC程序默认使用的调用约定,也可以在函数声明时加上__cdecl关键字来手工指定。采用__cdecl约定时,函数参数按照从右到左的顺序入栈,并且由调用函数者把参数弹出栈以清理堆栈。因此,实现可变参数的函数只能使用该调用约定。由于每一个使用__cdecl约定的函数都要包含清理堆栈的代码,所以产生的可执行文件大小会比较大。__cdecl可以写成_cdecl。
__stdcall 调用约定用于调用Win32 API函数。采用__stdcal约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,函数参数个数固定。由于函数体本身知道传进来的参数个数,因此被调用的函数可以在返回前用一条ret n指令直接清理传递参数的堆栈。__stdcall可以写成_stdcall。
__fastcall 约定用于对性能要求非常高的场合。__fastcall约定将函数的从左边开始的两个大小不大于4个字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的堆栈。__fastcall可以写成_fastcall。
__stdcall 调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上”@”和参数的字节数。
特别说明
1. 在默认情况下,采用__cdecl方式,因此可以省略.
2. WINAPI一般用于修饰动态链接库中导出函数
3. CALLBACK仅用于修饰回调函数
4. 你可能已经发现,VC下和BCB下对WINAPI的定义不同,那么你至少理解了为什么不能直接从BCB下调用VC的dll的一个原因了。
边栏推荐
猜你喜欢

6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!

多线程学习

WebShell简介

贝塞尔函数

量子力学初步

What is a template engine?What are the common template engines?Introduction to common commands of thymeleaf.

6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!

常用类学习

C语言——指针和数组、指针数组和数组指针、指针和二维数组

DSPE-PEG-Aldehyde, DSPE-PEG-CHO, Phospholipid-PEG-Aldehyde MW: 1000
随机推荐
百度地图——地图找房功能
Mathematica 作图详解
docker安装单机版redis、集群版redis
用户如何正确去认识程序化交易?
如何灵活运用量化交易接口的优势取长补短?
玩转云端 | 天翼云电脑的百变玩法
对于程序化交易,重在预测还是重在对策呢?
How do users correctly understand programmatic trading?
For programming trading, focusing on forecast or on countermeasures?
数据库多表链接查询的方式
代码随想录笔记_动态规划_377组合总和IV
What do professional quantitative traders think about quantitative trading?
How can I know if quantitative programmatic trading is effective?
Seize the opportunity of quantitative trading fund products, and quantitative investment has room for development?
突然想分析下房贷利率及利息计算
DSPE-PEG-Hydrazide,DSPE-PEG-HZ,磷脂-聚乙二醇-酰肼MW:1000
思维导图FreeMind安装问题及简单使用
What are the hot topics in quantitative programmatic trading?
Mongodb增加权限管理
百度地图——鹰眼轨迹服务