VS2005中C++计算结果与VC不一样?
inti=8;printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);正常在VC中结果应该是8778,可是以VS2005中结果却是8878,...
int i=8;
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
正常在VC中结果应该是8778,可是以VS2005中结果却是8878,这是为什么?哪里有设置吗?
好,我知道是跟编译器有关,但我想知道在VS2005里怎样设置才能保持与VC中运算结果一样呢?是哪些设置在起作用? 展开
printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);
正常在VC中结果应该是8778,可是以VS2005中结果却是8878,这是为什么?哪里有设置吗?
好,我知道是跟编译器有关,但我想知道在VS2005里怎样设置才能保持与VC中运算结果一样呢?是哪些设置在起作用? 展开
3个回答
展开全部
不同的编译器的结果会不同的,而不同的结果也不能说是谁对谁错,它们都有自己的解释,就是说这个加号减号的运算顺序是不确定的,注意是运算顺序,不是结合顺序,比如(++i)+(++i)+(++i),这个式子,你只能根据优先级的表确定括号里面的先执行,但是谁都不能确定的告诉你三个式子是哪个先执行,所以有了不同的结果,在c的标准里面,这个是没有规定运算顺序的,在c的标准里面,有且仅有四个运算符是规定了运算顺序的,注意是运算顺序,那就是与&&,或||,逗号运算符,,唯一的三目运算符?:,除了这四个运算符规定是从左到右执行的,剩下的都没有规定运算顺序。
所以不要再追究这个一堆这样的式子最后得多少了,因为这个根本没有谁对谁错,上面是我的理解,希望对你有帮助
这个不能设置的吧,避免这样的移植性失误只能在表达式里面不要用这些表达式了,养成一个好的编程习惯
所以不要再追究这个一堆这样的式子最后得多少了,因为这个根本没有谁对谁错,上面是我的理解,希望对你有帮助
这个不能设置的吧,避免这样的移植性失误只能在表达式里面不要用这些表达式了,养成一个好的编程习惯
展开全部
编译器不同结果也不同? 那要标准干吗?
VS2005里的是错的。知道它的这个Bug后以后尽量避免使用类似代码。
VS2005里的是错的。知道它的这个Bug后以后尽量避免使用类似代码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
入栈顺序的问题 这玩艺有不定的答案 不同的编译器 不同的平台能产生五花八门的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询