免费注册 查看新帖 |

Chinaunix

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

[C] C语言函数参数压栈顺序与求值顺序的问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2009-05-17 17:11 |只看该作者
从17楼开始,都是以C角度看C以外的世界。
PEEK是BASIC的函数,POKE是BASIC的命令,都是BASIC固有的,不是用户开发的。BASIC主要是命令和函数构成的。把命令和函数排除出去了,那BASIC还剩什么?就剩下几个伪语句。几个伪语句也算语言嘛?
你说的函数不属于C本身,没错,R&D好像也说过差不多的话。但是,这是C的特点之一,不是放之高级语言四海而皆准的普遍真理。你提到过的FORTRAN,也不是这样,PASCAL也不这样。
如果有个克一思戴着BASIC眼睛说C如何如何,这硬拗起来就有趣了。许多论坛上,常见C/C++和Java打架,莫非思一克也想和克一思打一架?哪位扮克一思?

论坛徽章:
0
32 [报告]
发表于 2009-05-17 17:15 |只看该作者
过去在关于Windows编程的书里,就说到过,有C参数风格和PASCAL参数风格。Windows好像用的是后者,记不清了。

论坛徽章:
0
33 [报告]
发表于 2009-05-17 19:05 |只看该作者
C的参数入栈顺序没有强行的规定。
多数系统是从后往前(最后参数最先入)。
也有的系统是从前往后。
至于计算顺序,应该是和入站顺序一致的。否则又要用一个额外的结构保存。既然无规定,不会有脱裤子排尾气费二遍事的必要。

论坛徽章:
0
34 [报告]
发表于 2009-05-17 19:09 |只看该作者
不是这样的,可以参见我前面贴的ASM,

实际上很多RISC机器上跑的系统都是从左向右计算参数,

[descriptions from C99]
The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.
EXAMPLE In the function call (*pf[f1()]) (f2(), f3() + f4()) the functions f1, f2, f3, and f4 may be called in any order. All side effects have to be completed before the function pointed to by pf[f1()] is called.

论坛徽章:
0
35 [报告]
发表于 2009-05-18 13:58 |只看该作者
争论很精彩,可是我看的人都晕忽忽了

论坛徽章:
0
36 [报告]
发表于 2011-04-01 21:20 |只看该作者
回复 1# angelanpan


    表示学习了啊,不过不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP