| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2790 人关注过本帖
标题:一个很简单的C问题
只看楼主 加入收藏
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:1 
已经很久没来论坛了。记得以前TonyDeng版在的时候遇到这种帖子是直接锁帖的。

出现这种结果是因为不同的编译器对于++这种操作的处理方式不同。如果条件允许,楼主可以试着装几个其他的编译器,你会发现结果会不同。

如果不是二级C的考试,能遇到这种代码或者写出这种代码,那也只能说写这代码的要么是个人才,要么是个疯子。

代码测试环境:  WinXP+C-Free5.0.
2017-09-01 15:56
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
b=(++i)+(++i)+(++i);
是否这样理解,写成:
b=(++i)+((++i)+(++i));

2017-09-01 15:58
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
以下是引用vvvcuu在2017-9-1 15:56:31的发言:

已经很久没来论坛了。记得以前TonyDeng版在的时候遇到这种帖子是直接锁帖的。

出现这种结果是因为不同的编译器对于++这种操作的处理方式不同。如果条件允许,楼主可以试着装几个其他的编译器,你会发现结果会不同。

如果不是二级C的考试,能遇到这种代码或者写出这种代码,那也只能说写这代码的要么是个人才,要么是个疯子。

作为学习,话不能说绝。
当然,这类语句有点另类,一来难读,二来有不确定性,实际应用可免则免。
谁能保证自己写的代码都能用不同的编译器编译而无问题。
这样也许能加深对编译器的认识,并无什么坏处吧?

[此贴子已经被作者于2017-9-1 16:06编辑过]

2017-09-01 16:04
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
现在基本可以理解编译器是怎么工作的:
因为“+”是一个双目运算符,因此编译器自左向右扫描会先做最左边的“+”,要做这个“+”,必须先取出这个加两边的变量,而这两边的变量是两个前缀“++”,而前缀“++”的规则是先自加再使用,所以变成了7+7,接下来再做第二个“+”,仍然要执行先自加再使用原则,所以变成8+14=22了。
话说:我是先学汇编再学c的,我一直以为c里面有一个“自加”“自减”运算符是为了充分利用汇编里的“inc、dec”指令,达到最佳优化效果;结果反汇编后才知道根本不是那么回事,它干嘛要这个运算符呢!

能编个毛线衣吗?
2017-09-01 16:21
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:1 
回复 11楼 vvvcuu
你说的对,能写出这种代码的,也是智商感人,没错,我说的就是谭浩强。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-02 10:56
快速回复:一个很简单的C问题
数据加载中...
 
   



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

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