首页
社区
课程
招聘
[求助]helpme,不同编译器编译的C差别咋就那大呢
发表于: 2009-1-13 17:14 4741

[求助]helpme,不同编译器编译的C差别咋就那大呢

2009-1-13 17:14
4741
main()
{
    float x=3;
    int y;
    y=(x++)+(++x)+(x++);
    printf("x=%f,y=%d",x,y);
    getch();
}


我用Dev-C编译x=4.000000,y=11

用Win-TC(Turbo C)编译x=6.000000,y=13

怎么回事啊

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
老大们都去哪了
2009-1-13 17:22
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
x   加了3次 应该最后为6
y =  3+5+5 = 13
可能两编译器的支持的标准不同。。
2009-1-13 17:26
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那 那个Dev-C岂不是很Lj

明明三个自相加,结果x=4
2009-1-13 17:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第一次运行应该是:
x=4,y=11 对啊。。
2009-1-13 17:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
就是x=4 才正确,  因为++x 和x++是不一样的
2009-1-13 17:41
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
怎么对呢

三个自相加啊
2009-1-13 17:42
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
他x是不是要先全部自相加完了才printf?

在前在后只是相对于运算式而言的
2009-1-13 17:43
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这样说:比如是个循环  ++x既是本次循环 就变为4,而x++是本次还为3,执行完后下次就为4

y=(x++)+(++x)+(x++);   ,第一个x++ 应该为3吧,  加上 ++x 这次加的就是4, 最后的

x++ 因为本次x已经变了所以也是+4  ,y=11

如果你再运行 x=6 肯定的了
2009-1-13 17:45
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
main()
{
    int x=1;
    printf("%d",x++);
    printf("%d",++x);
    getch();
}

你运行一下这个就明白了
2009-1-13 17:48
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
错错错

你的算法跟Dev-C一样

但如果是浮点型(整数不一样)

就应该是x++  ==4,

然后在++x,这个时候x里面是4,所以加完他是5

最后在x++的时候就跟上面那位说的一样y=3+5+5

算完这步x还要自加1

最后printf

你老和我讨论自相加在前在后的问题,我知道啊
2009-1-13 17:51
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我的算法?这和算法有关系么,不讨论了。没意思
2009-1-13 17:54
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
实话实说

倒是你试试就知道了
2009-1-13 17:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
明白了,好久不用C都忘了。

不过float和int 导致y 结果不一样就不明白了。。。

哎聪明的程序员用delphi,真正的程序员用c++。。。

我是懒程序员。。。还喜欢短时间内开发程序的
2009-1-13 18:18
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
2009-1-13 18:25
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
16
讨论标准“未定义”(或者“由实现定义”)的东西,没什么意义。

实际工作中当然不会写这样的代码吧(老板绝对不会允许的)?

考试也不会考“未标准化”的内容吧(没有标准答案)?

这样的代码更谈不上什么“技巧性”吧(连程序行为都不保证一致)?

因使用了标准中未定义或由实现定义的内容,如果程序因此发生了错误,责任完全在程序员。编译器是无责任的。
2009-1-13 18:42
0
游客
登录 | 注册 方可回帖
返回
//