为什么c和c++函数参数从右往左压栈?
大约 1 分钟
为什么c和c++函数参数从右往左压栈?
因为c/c++支持“函数参数长度可变”这个特性
可变参数函数:函数声明时参数列表有...
,如printf(const char* format,…)
函数调用的过程:
- 将参数从右往左压栈
- 执行call指令,先将下一行指令的地址压栈,再进入调用函数
- 进入后,先将调用函数的栈底指针(即esp指针)压栈,然后再开辟栈空间

指令生成是在编译阶段生成,不知道运行时传入了几个参数,从右往左压栈,因为参数压完后又压入了下一行指令的地址以及调用函数栈底指针,因此第一个参数的位置永远是ebp+8,通过ebp的偏移依次获取其他参数
如果从左往右压栈,不知道传入参数个数,每次第一个参数的位置也是不确定的!!!
[指令角度理解堆栈调用过程 | 张威的编程学习笔记 (gitee.io)](https://iszhwei.gitee.io/ccpp/00 基础必备/指令角度堆栈调用过程.html)