免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

[C] printf参数入栈顺序和编译器相关,还是都是从右至左? [复制链接]

论坛徽章:
0
91 [报告]
发表于 2008-01-23 15:59 |只看该作者

回复 #87 whyglinux 的帖子

学习了!

论坛徽章:
0
92 [报告]
发表于 2008-08-18 21:34 |只看该作者
原帖由 newzy 于 2007-11-1 08:52 发表
参考: http://bbs.chinaunix.net/viewthr ... amp;highlight=newzy


#include
#include

int bar()
{
    return 20;
}

int main()
{
    int         len = 3;

    printf("%d ...

楼上的程序我在vc6.0下测试了。在debug下结果是20,3;在release模式下是20,20;可以得出函数的入栈顺序是从右到左,但是编译器会做优化,最终的结果可能不是预期的。所以最好不要写这样的代码,避免不必要的麻烦

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
93 [报告]
发表于 2008-08-19 11:11 |只看该作者
思一克版主给加了保留啊。谢谢版主,希望更多的人可以看到。

论坛徽章:
0
94 [报告]
发表于 2011-02-17 22:31 |只看该作者
从头看到尾,x86下如果堆栈增长方向向高地址,到底是不是还按从右到左的顺序入栈呢?
如果是的,是怎么找到参数个数的?

论坛徽章:
0
95 [报告]
发表于 2011-02-17 22:48 |只看该作者
C99
3.4.4
unspecified behavior
use of an unspecified value, or other behavior where this International Standard provides
two or more possibilities and imposes no further requirements on which is chosen in any
instance

EXAMPLE An example of unspecified behavior is the order in which the arguments to a function are evaluated.

论坛徽章:
0
96 [报告]
发表于 2011-02-17 23:02 |只看该作者
本帖最后由 ip2004 于 2011-02-17 23:04 编辑

挖老帖, 没想到KBTiller兄这么快就回复了,谢谢。

KBTiller兄对标准好熟悉,这么快就把相关的内容贴上来了,看来我也得认真看看标准了{:3_192:}

看来这个行为是依赖于编译器的实现方式,没仔细看过关于过程调用规范方面的东西。

参数求值顺序不同的编译器不一样这一点前面的讨论里面有。

论坛徽章:
0
97 [报告]
发表于 2011-02-18 23:09 |只看该作者
回复 96# ip2004


    很巧。当时我正在读标准的这个部分,看到这个帖子,顺手就把标准转上来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP