| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1546 人关注过本帖
标题:求一个问题,为啥这个代码在C-free 5.0 和DVE-C++5.11 里的输出结果不一样。 ...
只看楼主 加入收藏
testpaper
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-4-23
收藏
 问题点数:0 回复次数:5 
求一个问题,为啥这个代码在C-free 5.0 和DVE-C++5.11 里的输出结果不一样。
#include <stdio.h>
int main()
{
   int a=1;
   printf("%d %d %d %d %d\n",a,a+1,a+3,a,a+5);
   a=1;
   printf("%d %d %d %d %d\n",a,a=a+1,a+3,a,a=a+5);
   return 0;
}

前者第二行是77966
后者却是77977
搜索更多相关主题的帖子: 输出 代码 C-free 结果 C++ 
2020-04-23 11:20
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1689
专家分:4262
注 册:2007-12-27
收藏
得分:0 
恭喜你这么早就发现了。
那么结论就是,记得不要这样写代码。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-04-23 11:54
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1689
专家分:4262
注 册:2007-12-27
收藏
得分:0 
我们习惯用点头表示肯定,用摇头表示否定。
可是在某些国家正好相反。
我们不必深究这些习惯的历史由来,
应该记得的是出国旅游的时候不要随便评价人家,不管是动脑袋还是说出声来。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-04-23 11:59
testpaper
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-4-23
收藏
得分:0 
回复 2楼 forever74
我只是想问一下,这里头有什么特殊的机制吗?
2020-04-23 14:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 4楼 testpaper
在C/C++中,函数的参数们的“评估顺序”是“未指定”的,
函数的参数们的“评估”之间是无“序列点”的,
那么在两个序列点之间,若存在“副作用”的冲突,则是“未定义行为”。

虽然拗口,但很好判断。以
int a=1;
printf("%d %d %d %d %d\n",a,a=a+1,a+3,a,a=a+5);
为例,假如先评估 a=a+1,那么 a 就变为2了,printf("%d %d %d %d %d\n",2,……
,假如先评估 a=a+5,那么 a 就变为5了,printf("%d %d %d %d %d\n",5,……
而先评估谁并没有任何规定。
(很多外行人会误以为“从左到右”或“从右到左”,没有这规定;即使有这规定,还因为缺少序列点而一样属于“未定义行为”。举个例子:
假使先评估 a=a+1 再评估 a=a+5,那么评估 a=a+5 时是使用a=1还是a=2呢?因为无序列点,所以高兴用谁就用谁)

楼上说不同的编译器结果不一样,这是不准确的,因为 不同的编译器结果不一样 属于“实现定义行为”,
“未定义行为”是最恶劣的,因为“未定义行为”就是编译器从来没考虑过出现这种情况应该怎么办。同一个程序可能每次运行结果都不一样,有时输出一个数值,有时启动一个游戏。
2020-04-23 16:30
hbccc
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:108
专家分:315
注 册:2020-2-18
收藏
得分:0 
学习了
2020-04-23 21:20
快速回复:求一个问题,为啥这个代码在C-free 5.0 和DVE-C++5.11 里的输出结果不 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016682 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved