免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[C] 以其昏昏,使人昭昭? [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
61 [报告]
发表于 2010-04-07 20:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
62 [报告]
发表于 2010-04-07 21:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
63 [报告]
发表于 2010-04-07 21:44 |只看该作者
本帖最后由 rossini23 于 2010-04-07 21:45 编辑
p64,《C程序设计》(第三版),谭浩强 著,清华大学出版社,2005年7月第3版,2009年10月第26次印刷

评: ...
pmerofc 发表于 2010-04-06 21:39



根据语法规则组合出来的表达式在语义上并不总是正确的,例如:

minute + 1 = hour;

等号左边的表达式要求表示一个存储位置而不是一个值,这是等号运算符和+ - * /运算符的又一个显著不同。有的表达式既可以表示一个存储位置也可以表示一个值,而有的表达式只能表示值,不能表示存储位置,例如minute + 1这个表达式就不能表示存储位置,放在等号左边是语义错误。表达式所表示的存储位置称为左值(lvalue)(允许放在等号左边),而以前我们所说的表达式的值也称为右值(rvalue)(只能放在等号右边)。上面的话换一种说法就是:有的表达式既可以做左值也可以做右值,而有的表达式只能做右值。目前我们学过的表达式中只有变量可以做左值,可以做左值的表达式还有几种,以后会讲到。

我们看一个有意思的例子,如果定义三个变量int a, b, c;,表达式a = b = c是合法的,先求b = c的值,再把这个值赋给a,而表达式(a = b) = c是不合法的,先求(a = b)的值没问题,但(a = b)这个表达式不能再做左值了,因此放在= c的等号左边是错的。
------------------------------
上面这一段是本版很火的《Linux C编程一站式学习》里面摘出来的,完全相反的两个结论。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
64 [报告]
发表于 2010-04-07 22:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
65 [报告]
发表于 2010-04-08 01:30 |只看该作者
这种代码真的讨论的意义吗?

论坛徽章:
0
66 [报告]
发表于 2010-04-08 09:20 |只看该作者
dev-c++上(a=b)=c;运行正常啊  

论坛徽章:
0
67 [报告]
发表于 2010-04-08 09:28 |只看该作者
确实, 我开初就学的C语言, 后来发现, 要动手写程序的时候, 总是先想到优化, 而不是先做出个东西来. 好在发现了这个问题后, 我就有意避免, 还好, 稍有效果.
所幸后来到linux平台, 见识面宽了, 接触的语言多了, 接触的事例多了, 才把以前不好方式给避免了些. 幸运啊!
以我多年的经验来看, 初学东西, 最重要的是直接给出一条直接了当又没有歧义的道路, 待上路之后再想其它更好的方式.

教初学者C/C++,应该先告诉他一条简单正确的路,而不是告诉他有多少条路可以选。还没学会写程序就开始玩技巧 ...
hellioncu 发表于 2010-04-07 09:36

论坛徽章:
0
68 [报告]
发表于 2010-04-08 09:46 |只看该作者
真雞巴沒事干

论坛徽章:
0
69 [报告]
发表于 2010-04-08 10:09 |只看该作者
支持lz
我看中国的教科书看得很郁闷
幸亏我不是这样入门的
还有:(a=15)=16;在gcc中编译通过,结果为16,不过我也觉得没有意义
a+=a-=a*a;也通过,但给了警告:
1.cc:5: warning: operation on ‘a’ may be undefined
1.cc:5: warning: operation on ‘a’ may be undefined
结果也很奇怪;

论坛徽章:
0
70 [报告]
发表于 2010-04-08 10:17 |只看该作者
请问70楼gcc的版本
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP