C参数入栈顺序

自由建客 2006-12-27 01:12:29
C为何非要搞个从右往左的顺序,我实在想不出来这在技术上有什么优势。如果讲是为了实现可变参数的话,从左往右也可以呀,Pascal不就是如此嘛。像下面这样的函数调用,往往容易让人把语意弄错。f(g(&x),x),本意是想让g()先改变一下x。
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
从右到左挺好的嘛
晨星 2006-12-27
  • 打赏
  • 举报
回复
我知道,所以我前面说“倒过来写”。
那样,现在的printf就需要这样写了:

printf("abcd", 3.14, 5, "%i, %f, %s");
我觉得不习惯,很容易把人倒腾糊涂。
自由建客 2006-12-27
  • 打赏
  • 举报
回复
to steedhorse(晨星)
从右往左把标示参数个数的参数放在最左,从左往右则示参把标数个数的参数放在最右。
C: printf() Pascal: write() writeln()
nasi00 2006-12-27
  • 打赏
  • 举报
回复
同意steedhorse(晨星),不要写出对编译器的实现有依赖的代码,这种bug很难追
todototry 2006-12-27
  • 打赏
  • 举报
回复
处理printf()
之类参数个数不确定的函数,需从右至左参数入栈
因为事先无法知道参数个数,只有执行函数的调用的时候才能计算出来
晨星 2006-12-27
  • 打赏
  • 举报
回复
从左往右怎么实现可变参数?把参数顺序都倒过来写吗?

还有,我觉得写出对参数压栈顺序有依赖的代码本身就不是一个好风格,拆成两条明确的语句不好吗?

最后,在你所举的那个例子中,按照你所表达的意思,那是跟参数的求值顺序有关,而不是跟压栈顺序有关。参数的求值顺序和压栈顺序是不是一码事。C语言的参数求值顺序也是不确定的,由编译器设计者自己看着办。
kangji 2006-12-27
  • 打赏
  • 举报
回复
不太懂编译技术,关注
从右往左是iso规定的么?ISO应该只规定语法吧,至于编译器实现跟编译器生成厂家有关系

69,335

社区成员

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

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