为什么用java和VC写出的同一功能的程序,运行结果却不同? VC6.0开发环境下运行结果如下图示:Myeclipse开发环境下运行结果如下图示:谁能告诉我为什么一个结果为13,一个为12呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是 C 编译器怪异的地方,不同的 C 编译器得出来的结果可能不一样!如果不是为了体现编写代码的水平,就不要使用这样的表达式。由于 + 运算具有左结合性,因此在 VC 中 (++i) + (++i) + (++i) 是这样处理的:( (++i) + (++i) ) + (++i)而 VC 的编译器是先自增后,再参与运算的,因此红色部分会变为:( 4 + 4 ) 得到的结果再与 ++i 进行运算,由于这时 i = 4,那 ++i 就等于 5,因此结果为 13。希望能谨记这样一个教训:在单个的表达式中不要对相同的变量赋值两次。表达式如果包含对相同变量的多次赋值,就会引起混乱。并且很少能够执行你希望的操作。即使对多个变量进行赋值也很容易出错。更一般地讲,要避免所谓聪明的编程技巧。它们都是易于产生bug 的,很难以维护,并且运行速度经常是比它们所替代掉的简单直观的代码要慢。——引自《Java 解惑》迷题 7 那个是C编译器的问题。gcc编译的结果是13clang的结果是12 虽然在 Java 语言规范中有规定表达式的计算顺序,不至于在不同的 Java 编译器上产生不同的结果,尽管这样,也要避免出现这样的代码。不要为了突显自己这些所谓的编程技巧而带来无穷的后患。 同意火龙果的说法..用vc看了下++i + ++i + ++i汇编码..确实是先执行2次inc然后再进行第一次add的也就是4+4 +5 = 13 java 笔试题 论CSDN的可持续发展 java问题 哪位大虾指点啊??????抛异常!!!!! hashCode的问题,请大哥帮忙! 关于JAVA Object 反序列化的问题,如何将一个格式化的String反序列化成对应的Java object 线程问题? 求助,急用 高分相送,请高手进来赐教! java 技术自己生成word格式文档?有人知道吗? 反射! 局域网发送包
clang的结果是12
确实是先执行2次inc然后再进行第一次add的也就是4+4 +5 = 13