C语言参数入栈顺序为什么是从右向左?

ELinux2607 2014-01-15 11:01:13
哪位大虾详细解释下?之前在网上找了不少资料,一直没得到令人信服的理由。
...全文
405 13 打赏 收藏 转发到动态 举报
写回复
用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++程式的参数压栈顺序只和编译器相关!
  • 打赏
  • 举报
回复
引用 楼主 armfpga123 的回复:
哪位大虾详细解释下?之前在网上找了不少资料,一直没得到令人信服的理由。
C语言没有规定,是编译器自己定义的 x64下就不是这样子了
gogiqp_jyh 2014-01-16
  • 打赏
  • 举报
回复
看看printf的实现
derekrose 2014-01-15
  • 打赏
  • 举报
回复
为了支持可变参数

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧