关于参数的入栈和自增

我假发呢丶 2017-07-18 07:28:04

int i = 0;
printf("%d %d %d %d %d",i++,i++,i++,i++,i++);
输出的是4 3 2 1 0

int j=0;
printf("%d %d %d %d %d",++j,++j,++j,++j,++j);
输出的是 5 5 5 5 5

只要是置前自增,输出的结果就是5,滞后自增就是按顺序的结果。


参数是从右向左入栈的,那这里的执行顺序是什么?
...全文
496 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
东边一耳 2017-08-03
  • 打赏
  • 举报
回复
引用 7 楼 yirol_ 的回复:
[quote=引用 1 楼 lin5161678 的回复:] 代码错了 这是未定义行为 编译器处理方式无法确定 有多种不同输出 没有意义
这个应该是和编译器有关系。我用的是gcc[/quote] 这个跟ABI有关,编译器是按照ABI来实现,如果ABI未定义或者定义不清晰,不同编译器会有不同处理方式。但是像函数入栈顺序,这个肯定ABI定义的很清楚
赵4老师 2017-07-28
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
UniqueJary 2017-07-28
  • 打赏
  • 举报
回复
引用 6 楼 wang0635 的回复:
谁说“参数是从右向左入栈的”?
你的意思是从左向右?
不懂啊不懂 2017-07-27
  • 打赏
  • 举报
回复
这个跟编译器有关,能看反汇编的话去看看,反正VC6存的都是0
jianyue--- 2017-07-26
  • 打赏
  • 举报
回复
这样的问题不值得研究,这样的代码没有实用价值,工作中不能用,如果你常写出这样的代码,或许你离下岗只有半步之遥了。
jena_wy 2017-07-26
  • 打赏
  • 举报
回复
这个跟printf进栈出栈的顺序有关
int_Paul 2017-07-26
  • 打赏
  • 举报
回复
因为你直接调用库输里面的标准出函数printf(),你根本不知道在库函数printf()里面他是按什么顺序处理这些运算的,所以出来的结果是无法预知的。如果你要实现显示自增的数值,建议规范代码的书写格式,例如: int main() { int a = 0; int b,c,d; b = a++; c = a++; d = ++a; printf("%d,%d,%d",b,c,d); / /出来的结果就是0,1,3 }
赵4老师 2017-07-21
  • 打赏
  • 举报
回复
lin5161678 2017-07-19
  • 打赏
  • 举报
回复
引用 7 楼 yirol_ 的回复:
这个应该是和编译器有关系。我用的是gcc
代码错了 你用什么编译器都一样 gcc 一样有不同的运行结果 你开优化看看
wang0635 2017-07-19
  • 打赏
  • 举报
回复
引用 8 楼 yirol_ 的回复:
[quote=引用 5 楼 baidu_37097818 的回复:] 旁边如果真有人这么写就会被我打一顿
一般情况下肯定不能这么写,我只是想知道这里是怎么样的?[/quote] 怎么样都可能。
「已注销」 2017-07-19
  • 打赏
  • 举报
回复
未定义行为,后期还有优化行为,全是0 0 0 0 0 ,或者全部 5 5 5 5 都可能
我假发呢丶 2017-07-19
  • 打赏
  • 举报
回复
引用 5 楼 baidu_37097818 的回复:
旁边如果真有人这么写就会被我打一顿
一般情况下肯定不能这么写,我只是想知道这里是怎么样的?
我假发呢丶 2017-07-19
  • 打赏
  • 举报
回复
引用 1 楼 lin5161678 的回复:
代码错了 这是未定义行为 编译器处理方式无法确定 有多种不同输出 没有意义
这个应该是和编译器有关系。我用的是gcc
wang0635 2017-07-18
  • 打赏
  • 举报
回复
谁说“参数是从右向左入栈的”?
开心秋水 2017-07-18
  • 打赏
  • 举报
回复
旁边如果真有人这么写就会被我打一顿
OnePeace888 2017-07-18
  • 打赏
  • 举报
回复
这个练不出水平,感觉
mate_2017 2017-07-18
  • 打赏
  • 举报
回复
还是要尽量规范的写
lin5161678 2017-07-18
  • 打赏
  • 举报
回复

lin5161678 2017-07-18
  • 打赏
  • 举报
回复
代码错了
这是未定义行为
编译器处理方式无法确定
有多种不同输出
没有意义

69,371

社区成员

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

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