- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 语言陷阱和缺陷[1]
原著:Andrew Koenig - ATT Bell Laboratories Murray Hill, New Jersey 07094
原文:收藏
翻译:lover_P
[译序]
那些自认为已经 学完”C 言的人,请你们仔细读阅读这篇文章吧。路还长,很多东西要学。我也是……
[概述]
C 言像一把雕刻刀,锋利,并且在技师手中非常有用。和任何锋利的工具一样,C 会伤到那些不能
掌握它的人。本文介绍C 语言伤害粗心的人的方法,以及如何避 伤害。
[内容]
0 简介
1 词法缺陷
o 1.1 = 不是 ==
o 1.2 和 | 不是 和 ||
o 1.3 多字符记号
o 1.4 例外
o 1.5 字符串和字符
2 句法缺陷
o 2.1 理解声明
o 2.2 运算符并不总是具有你所想象的优先级
o 2.3 看看这些分号!
o 2.4 switch 句
o 2.5 函数调用
o 2.6 悬挂else 问题
3 链接
o 3.1 你必须自己检查外部类型
4 义缺陷
o 4.1 表达式求值顺序
o 4.2 、||和!运算符
o 4.3 下标从零开始
o 4.4 C 并不总是转换实参
o 4.5 指针不是数组
o 4.6 避 提喻法
o 4.7 空指针不是空字符串
o 4.8 整数溢出
o 4.9 移位运算符
5 库函数
o 5.1 getc()返回整数
o 5.2 缓冲输出和内存分配
6 预处理器
o 6.1 宏不是函数
o 6.2 宏不是类型定义
7 可移植性缺陷
o 7.1 一个名字中都有什么
o 7.2 一个整数有多大
o 7.3 字符是带符号的还是无符号的
o 7.4 右移位是带符号的还是无符号的
o 7.5 除法如何舍入
o 7.6 一个随机数有多大
o 7.7 大小写转换
o 7.8 先释放,再重新分配
o 7.9 可移植性问题的一个实例
8 这里是空闲空间
参考
脚注
0 简介
C 言及其典型实现被设计为能被专家们容易地使用。这门语言简洁并附有表达力。但有一些限制可
以保护那些浮躁的人。一个浮躁的人可以从这些条款中获得一些帮助。
在本文中,我们将会看一看这些未可知的益处。这是由于它的未可知,我们无法为其进行完全的分类。
不过,我们仍然通过研究为了一个C 程序的运行所需要做的事来做到这些。我们假设读者对C 语言至少有
个粗浅的了解。
第一部分研究了当程序被划分为记号时会发生的问题。第二部分继续研究了当程序的记号被编译器组
合为声明、表达式和 句时会出现的问题。第三部分研究了由多个部分组成、分别编译并绑定到一起的C
程序。第四部分处理了概念 的误解:当一个程序具体执行时会发生的事情。第五部分研究了我们的程序
和它们所使用的常用库之间的关系。在第六部分中,我们注意到了我们所写的程序也不并不是我们所运行
的程序;预处理器将首先运行。最后,第七部分讨论了可移植性问题:一个能在一个实现中运行的程序无
法在另一个实现中运行的原因。
1 词法缺陷
编译器的第一个部分常被称为词法分析器 (lexica
文档评论(0)