VC6.0开发环境下运行结果如下图示:Myeclipse开发环境下运行结果如下图示:
谁能告诉我为什么一个结果为13,一个为12呢?

解决方案 »

  1.   

    这是 C 编译器怪异的地方,不同的 C 编译器得出来的结果可能不一样!如果不是为了体现编写代码的水平,就不要使用这样的表达式。由于 + 运算具有左结合性,因此在 VC 中 (++i) + (++i) + (++i) 是这样处理的:( (++i) + (++i) ) + (++i)而 VC 的编译器是先自增后,再参与运算的,因此红色部分会变为:( 4 + 4 ) 得到的结果再与 ++i 进行运算,由于这时 i = 4,那 ++i 就等于 5,因此结果为 13。希望能谨记这样一个教训:在单个的表达式中不要对相同的变量赋值两次。表达式如果包含对相同变量的多次赋值,就会引起混乱。并且很少能够执行你希望的操作。即使对多个变量进行赋值也很容易出错。更一般地讲,要避免所谓聪明的编程技巧。它们都是易于产生bug 的,很难以维护,并且运行速度经常是比它们所替代掉的简单直观的代码要慢。——引自《Java 解惑》迷题 7
      

  2.   

    那个是C编译器的问题。gcc编译的结果是13
    clang的结果是12
      

  3.   

    虽然在 Java 语言规范中有规定表达式的计算顺序,不至于在不同的 Java 编译器上产生不同的结果,尽管这样,也要避免出现这样的代码。不要为了突显自己这些所谓的编程技巧而带来无穷的后患。
      

  4.   

    同意火龙果的说法..用vc看了下++i + ++i + ++i汇编码..
    确实是先执行2次inc然后再进行第一次add的也就是4+4 +5 = 13