找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3957|回复: 2
打印 上一主题 下一主题
收起左侧

《C陷阱与缺陷》读后感(未完,待续)

[复制链接]
跳转到指定楼层
楼主
ID:76244 发表于 2015-4-6 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一章—词法“陷阱”
比如一个句子里面,我们要这个句子意思,就要弄明白每个单词的意思,但是我们不用去理会每个字母意思,单个字母本来就不存在意义。C语言程序也是同样的道理,独立的一个符号不存在意义,要将符号组合起来,才会产生意义。
举例:P->s="->",好明显,左边的“-”与右边的“-”是不同的意思,右边是一个字符串。左边是什么呢?
编译器里面有一个叫“词法分析器”的东西,是将程序分解成一个一个字符的高深东东。

重点1:=不同于==
我觉得很多程序员对这个“=不同于==”有深刻的体会,我也深感体会,因为我在写单片机C语言程序的时候经常将这两者搞错。
首先"="是赋值操作,而“==”就是比较操作。我就是经常无意识地将两者搞乱,经常犯错。
if(x=y)  break; 这个语句有什么问题?我原本想表达的意思是,当x=y时,然后break.但现在呢,if(x=y)的意思是将y赋值给x,然后判断是否为0,再执行break;
还有一个不错的例子:
while(c= ' ' || c == '\t' || c == '\n')
    c= getc(f);
由于赋值运算符=的优先级要低于逻辑运算符嘛,所以自然赋值运算符是最后执行的,答案就变为:
‘ ’ || c =='\t' || c == '\n' 赋值给c,又因为‘ ’的ASCII码是32,所以自然会将1赋值给c嘛。然后呢,然后呢。
就变成while(1);噢~~~NO.难道这不就是传说中的“死循环”吗? 大BUG出现了。





评分

参与人数 1黑币 +5 收起 理由
tieq1952 + 5 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-11-3 17:01 | 只看该作者
《C陷阱与缺陷》全书下载:http://www.51hei.com/bbs/dpj-97554-1.html
回复

使用道具 举报

板凳
ID:253767 发表于 2017-12-6 08:14 | 只看该作者
很好的资料,可为新手解惑。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表