社区
C语言
帖子详情
C语言参数入栈顺序为什么是从右向左?
ELinux2607
2014-01-15 11:01:13
哪位大虾详细解释下?之前在网上找了不少资料,一直没得到令人信服的理由。
...全文
405
13
打赏
收藏
C语言参数入栈顺序为什么是从右向左?
哪位大虾详细解释下?之前在网上找了不少资料,一直没得到令人信服的理由。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ForestDB
2014-01-16
打赏
举报
回复
一是为了支持可变参数 二来猜测即使参数固定,也方便编译器实现
yiyefangzhou24
2014-01-16
打赏
举报
回复
膜拜了,这个问题真心没考虑过
threenewbee
2014-01-16
打赏
举报
回复
http://blog.csdn.net/feixiaoxing/article/details/7521004
lm_whales
2014-01-16
打赏
举报
回复
这是历史原因造成的。 历史上,C语言的参数个数,并不是固定的。 和Fortran,Basic,Pascal相比 C是函数式的语言,而非命令式的语言。 C除了控制语句外,没有命令,只有声明(定义)和表达式。 C只有函数调用,没有输入输出命令(语句);输入输出,不是语言的一部分。 早期的Fortran,Basic,Pascal 都有,输入输出命令(语句);他们是语言的一部分。 C的函数调用,也是一个表达式,即函数调用表达式。 这样C函数,就是仅有的程序结构了。 这样,C 既有不确定类型和个数参数表的 scanf,printf 也有,其他类型的不确定个数参数的函数; 用一个,统一的调用约定处理的话。 自然是,从右向左入栈,调用者清栈比较好。 同时,这样可以保证: 1)第一个参数,是最接近栈顶的。其他,参数依序排列。 2)传递的参数长度过大(参数过多),不会出错。
dcw0402
2014-01-16
打赏
举报
回复
google calling convention
wang0635
2014-01-16
打赏
举报
回复
没有为什么 爱怎么做就怎么做 看谁写的编译器了
nadleeh
2014-01-16
打赏
举报
回复
引用 楼主 armfpga123 的回复:
哪位大虾详细解释下?之前在网上找了不少资料,一直没得到令人信服的理由。
编译器这样做效率高而已
vipcxj
2014-01-16
打赏
举报
回复
1L说得没错,可变参数最有名的例子就是printf
「已注销」
2014-01-16
打赏
举报
回复
支持变参可能是原因之一。另外就是传统了。cdecl只是默认,你可以可以选stdcall或pascal呀。
zhuobattle
2014-01-16
打赏
举报
回复
编译出来的c/c++程式的参数压栈顺序只和编译器相关!
珍惜生命远离CPP
2014-01-16
打赏
举报
回复
引用 楼主 armfpga123 的回复:
哪位大虾详细解释下?之前在网上找了不少资料,一直没得到令人信服的理由。
C语言没有规定,是编译器自己定义的 x64下就不是这样子了
gogiqp_jyh
2014-01-16
打赏
举报
回复
看看printf的实现
derekrose
2014-01-15
打赏
举报
回复
为了支持可变参数
浅谈
C语言
函数调用
参数
压栈的相关问题
以前在面试中被人问到这样的问题,函数调用的时候,
参数
入栈
的
顺序
是从
左
向右,还
是从
右向
左
。
参数
的
入栈
顺序
主要看调用方式,一般来说,__cdecl 和__stdcall 都是
参数
从右到
左
入栈
。 看下面的代码: #include int...
C语言
函数调用栈(二)
创建一个栈帧的最重要步骤是主调函数...对于有多个
参数
的函数,调用约定需规定主调函数将
参数
压栈的
顺序
(从
左
至右还
是从
右至
左
)。某些调用约定允许使用寄存器传参以提高性能。2)栈的维护方式主调函数将
参数
压栈后调用被
C语言
--视频精讲
C语言
作为被长期使用的编程语言,可以被运用到各种操作系统,游戏,开发中。本课程作为互联网上首家使用C99录制的
C语言
教程,展现了全面、专业。...可以帮助学员从基础开始一点点的深刻理解
C语言
。
lowkeyway#Embedded#
参数
传递和返回值传递1
1. 函数
参数
,默认调用惯例情况下从
右向
左
的
顺序
依次把
参数
压
入栈
中 2. 函数的返回地址,即调用方调用此函数(如call func1)的下一条指令的地址 3.
C语言
函数
参数
入栈
顺序
C语言
函数
参数
入栈
顺序
从右到bai
左
是为了方便可变
参数
du函数。 一、在函数调用时,函数
参数
的传递,在
C语言
中是通过栈数据结构实现的。 在调用函数时,先根据调用函数使用的
参数
,自
右向
左
依次压
入栈
中,然后调用...
C语言
69,370
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章