C++函数参数的传递顺序
2024-08-23 19:18:10
C++编译器默认使用的是 __cdecl 模式,参数是通过栈传递的,因此是从右到左的传参顺序。
int f(int a, int b, int c)
{
return 0;
}
int main(){
return f(printf("a"),printf("b"),printf("c"));
}
当用函数做实参时,编译器一般会根据参数传递顺序,先计算出函数的返回值,然后将返回值传递给原来的函数。
函数的参数是通过栈传递的。因此参数从右往左入栈顺序是:printf("c"),printf("b"),printf("a")。依次计算出结果:cba
参数传递标准
C,C++中
cdecl ,stdcall 自右向左 传到堆栈
pacal,自左向右传递到堆栈
register 无方向,因为没有用到堆栈
fastcall 使用寄存器的参数也没规定方向,并且至少有三个寄存器,和两个寄存器的两种版本
cdecl ,stdcall 自右向左 传到堆栈
pacal,自左向右传递到堆栈
register 无方向,因为没有用到堆栈
fastcall 使用寄存器的参数也没规定方向,并且至少有三个寄存器,和两个寄存器的两种版本
最新文章
- 不在折腾----hadoop-2.4.1完全分布式集群搭建
- 三、jQuery--jQuery基础--jQuery基础课程--第11章 jQuery 工具类函数
- python一个简单的登录
- CommonJS规范
- Python基础 第二天
- 汇编语言-求X的阶乘
- 网格GridLayout建立
- 功能整合(一):滚动条的变相隐藏、js控制div的渐变显示、滚动条监听
- python之分析decode、encode、unicode编码转换
- Windows Azure NotificationHub+Firebase Cloud Message 实现消息推动(付源码)
- 实验9-1 编写一个存储过程proc_test_func
- @EnableHystrix
- linux-shell数据重定向详细分析
- 去掉li列表前面的空格
- python之面向对象的高级进阶
- IOS基本数据类型之枚举
- Spring源码深度解析系列-----------org.springframework.aop-3.0.6.RELEASE
- asp.net Core2.1连接到Mysql 数据库
- innosetup的静默安装与卸载
- CentOS 6.9安装类型选择(Basic Server/Web Server)