免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2208 | 回复: 6
打印 上一主题 下一主题

这个程序用任何编译器编译都会得相同结果么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-20 19:00 |只看该作者 |倒序浏览
#include<stdio.h>
int a(int x, int y, int z)
{
    printf("%d,%d,%d\n",x,y,z);
    return (x+y+z);
}

int main()
{
    int x=1,y=2,z=3,t;
    t=a(z++,++y,x+y+z);
    printf("%d\n",t);
    printf("%d,%d,%d\n",x,y,z);
}


gcc下编译后,运行结果是:
3,3,6
12
1,3,4


gcc求函数参数是从后向前求值,有没有从前向后的顺序求参数的编译器??
ANSI C规定了参数的求值顺序了么?

[ 本帖最后由 pcbit 于 2008-1-20 19:07 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-20 19:02 |只看该作者
应该不会。

论坛徽章:
0
3 [报告]
发表于 2008-01-20 19:03 |只看该作者
原帖由 cugb_cat 于 2008-1-20 19:02 发表
应该不会。



为什么?
是不是ANSI C标准没有规定函数参数的求值顺序

论坛徽章:
0
4 [报告]
发表于 2008-01-20 19:14 |只看该作者
原帖由 pcbit 于 2008-1-20 19:03 发表



为什么?
是不是ANSI C标准没有规定函数参数的求值顺序

  1. gcc test24.c -Wall
  2. test24.c: In function ‘main’:
  3. test24.c:11: warning: operation on ‘z’ may be undefined
  4. test24.c:11: warning: operation on ‘y’ may be undefined
复制代码
  1. rainlx@rainlx:~/Test$ gcc -v
  2. Using built-in specs.
  3. Target: i486-linux-gnu
  4. Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.1.3 --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
  5. Thread model: posix
  6. gcc version 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)
复制代码

论坛徽章:
0
5 [报告]
发表于 2008-01-20 19:28 |只看该作者
原帖由 cugb_cat 于 2008-1-20 19:14 发表


gcc test24.c -Wall
test24.c: In function ‘main’:
test24.c:11: warning: operation on ‘z’ may be undefined
test24.c:11: warning: operation on ‘y’ may be undefined
rainlx@rainlx:~/Test ...


明白你的意思了.

[ 本帖最后由 pcbit 于 2008-1-20 19:33 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-01-21 10:58 |只看该作者
1 ansi c已经落伍了
2 google __cdecl
3 c标准只规定了语言的功能,没有规定语言的实现
比如你可以把a+2翻成
inc eax
inc eax
也可以是
add eax,2
再加上编译优化的差别.....你可以认为结果是一样的,也可以认为是不一样的,取决于你看问题的角度。

论坛徽章:
0
7 [报告]
发表于 2008-01-21 12:15 |只看该作者
原帖由 pcbit 于 2008-1-20 19:03 发表



为什么?
是不是ANSI C标准没有规定函数参数的求值顺序

函数参数的入栈出栈顺序都是编译器自己定义的,ansi c并没有规定从左到右还是从右到左
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP