书上不是说逗号运算符的取值是从左到右的吗,为什么这段代码在VC6和VS2010上的运行结果完全不同?解决方法
书上不是说逗号运算符的取值是从左到右的吗,为什么这段代码在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语言的未定义行为