首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-07 
书上不是说逗号运算符的取值是从左到右的吗,为什么这段代码在VC6和VS2010上的运行结果完全不同?C/C++ code

书上不是说逗号运算符的取值是从左到右的吗,为什么这段代码在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语言的未定义行为

热点排行