专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

书上不是说逗号运算符的取值是从左到右的吗,为什么这段代码在VC6和VS2010上的运行结果完全不同?解决方法

发布时间:2011-06-28 16:18:39 文章来源:www.iduyao.cn 采编人员:星星草
书上不是说逗号运算符的取值是从左到右的吗,为什么这段代码在VC6和VS2010上的运行结果完全不同?
C/C++ code
#include<stdio.h>
int add(int a,int b){
    return a+b;
}
void main()
{
    int c=8;
    printf("%d %d %d\n",c,add(c++,c++),c);
    c=8;
    printf("%d %d %d\n",c,add(++c,++c),c);
    c=8;
    printf("%d %d %d\n",c,add(++c,c++),c);
    c=8;
    printf("%d %d %d\n",c,add(c++,++c),c);
    getchar();
}




VC6的运行结果是
10 16 8
10 19 8
10 17 8
10 18 8


VS2010的运行结果是
8 16 8
10 20 10
9 17 9
9 18 9


怎么回事,太蹊跷了

------解决方案--------------------
楼主你知道那么多逗号,有几个是真正的逗号运算符么?

------解决方案--------------------
不是优化造成的,现在的VC对++ --的求值处理有问题,没有按照正常的求值顺序。
------解决方案--------------------
本人也是小鸟一个,还是说下我的看法哈

首先调用函数的时候,实参之间的的逗号只是普通的标点符号不是运算符

还有你调用add的时候,两个参数都是c变量的自增,这属于未定义行为(我是这么认为的),你可以去查一下c语言的未定义行为
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: