真是疯了 同样的源代码在不同的开发结果上编译后运行出不同的结果~~~~到底哪个编译器好呢??

pztx1992 2009-04-14 01:59:16
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i=5,j=5;
int p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);

printf("%d",p);
printf("\n%d",q);//打死都想不通结果为22 用的编译器dev-c++ 好像我用简易C编译结果为24 书上说结果为24
//是不是编译器的问题呢?CFree也是22,到底用哪个编译器呢?疯了!!!!!

scanf("");
system("pause");
return 0;
}
...全文
350 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
morris88 2009-04-20
  • 打赏
  • 举报
回复
明显 LZ 没看标准:执行次序由编译器自己确定!

每个编译器运算所得出的结果都是对的...
不对的是写这个程序的人而已...
ustbleetom 2009-04-20
  • 打赏
  • 举报
回复
考试可能考这样的题吧~~郁闷~~
iambic 2009-04-19
  • 打赏
  • 举报
回复
转行吧。
cheng_fengming 2009-04-19
  • 打赏
  • 举报
回复
关于p=(i++)+(i++)+(i++)的解释:
上式在不同的编辑器中得出的值可能会不一样,加入i的初值为3,许多人会认为先求第一个括号内的值,得3,再实现i的自加得到4,再求第二个括号内的值...最后表达式的值是12;
但是大多数c++系统把3作为表达式中所有i的值,因此3个i相加,得到表达式的值是9,再实现自加,i的值最终为6 。
如果想得到12的值,可以这样写:
i=3;
a=i++;
b=i++;
c=i++;
d=a+b+c;
虽然语句都了,但是不会引起歧义,总之,尽量不要写如(i++)+(i++)+(i++)这样的表达式
----以上解释参考谭浩强老师的《c++程序设计》

xiaocha 2009-04-19
  • 打赏
  • 举报
回复
典型的书本代码, 那些"老师"们没做过实际项目, 写出的理论代码,
作为一个反面教材使用, 讨论结果毫无意义!
东莞某某某 2009-04-19
  • 打赏
  • 举报
回复
学习
  • 打赏
  • 举报
回复
欠拍的代码
hanyouquanlist 2009-04-19
  • 打赏
  • 举报
回复
脑残的老师出考试卷为难为学生才会这样写,而且绝对是选择题,正常人在写程序的时候绝对不会写这样的代码除非他跟老板有仇。
AvalonXP 2009-04-16
  • 打赏
  • 举报
回复
编译器问题参见:
http://snipurl.com/cppcode8828
OenAuth.Net 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hairetz 的回复:]
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);


你就在自虐
[/Quote]
正解

以前在学校时,觉得出这种题很有水平
现在觉得,如果哪个人再出这种题,我可能忍不住会灭他全家
ForestDB 2009-04-15
  • 打赏
  • 举报
回复
最好的编译器也给不出一个满意的答案。
amossavez 2009-04-15
  • 打赏
  • 举报
回复
无意义的代码,但是和考试!!
pztx1992 2009-04-15
  • 打赏
  • 举报
回复
谭浩强C语言程序设计


我只是想看看是怎么运算的,不可能写具体项目的时候用这些代码~~
zshtiger2414 2009-04-15
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/608706.htm
zshtiger2414 2009-04-15
  • 打赏
  • 举报
回复
volatile 是个什么东西啊!?
HeSWWW 2009-04-15
  • 打赏
  • 举报
回复
楼主真想研究着东东建议反汇编……
WOBUGUAN 2009-04-15
  • 打赏
  • 举报
回复
CSDN好像经常看见这种题
其实不仅求值顺序未定义,副作用发生的顺序也是未定义的
所以在p=(i++)+(i++)+(i++);中,
i的值不一定要在(i++)后立刻更新,而可以在对p赋值完成后才做。

建议你换课本
zgjxwl 2009-04-15
  • 打赏
  • 举报
回复
呵呵~~标准规定:求值顺序未定义。所以编译器的厂商也可能用不同的顺序求值的
jasonhuahua 2009-04-15
  • 打赏
  • 举报
回复
我估计你是在初学吧,在初学阶段为了让大家把语法搞清楚编者们一般都会把这些语句复杂风格奇特的程序拿出来给大家进行强化训练,这是可以理解的。你刚才的这个程序会根据编译系统的不同而不同,只要你真正搞清楚了就不会有太大的问题了,大可不必为结果的差异而烦恼!
na2650945 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 coverallwangp 的回复:]
是编译器的问题,这个需要写程序的人控制,不用写成p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);这种形式

[/Quote]
取决于编译器的实现。
在C PRIMER中明确的指出不要这么写。
这样写既没有意思。
也没有意义。
只是个反面教材。
加载更多回复(11)

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧