第一范文网 - 专业文章范例文档资料分享平台

《C陷阱与缺陷》笔记

来源:用户分享 时间:2021-04-06 本文由情绪难控 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

C中的经典,经过半个月的时间,慢慢的看了,感觉挺好的!做了点小总结

在初读《C陷阱与缺陷》时,前几章介绍的问题经常遇到,较容易掌握。又因懒

于动手未做笔记,越到后面越觉得自己记忆力有限才补做笔记。毕竟好记性不如烂笔

头。前四章时在别的笔记中粘贴过来。后面几章的学习中遇到似是而非的问题也参照

了其他人得笔记并整理出自己的东西。现在一并发出来,为更多的人提供参考。

让我们一起坚定的走下去!

第1章 词法“陷阱”

1.1 = 不同于 ==

== 为比较运算符, = 为赋值运算符

例: while( c = ' ' || c == '\t' || c == '\n' )

c = getc( f );

本意是c和 ' ' 比较,但错用成赋值符。这样的后果是将 ' ' || c == '\t'

|| c == '\n' 这个表达式的值给了c, 而使c = 1。

同样: if ( ( filedesc == open( argv[i], 0 ) ) < 0 ) error();

open的返回值和filedesc比较的结果只能是0或1,所以,error没有机会调用。

但是,此时filedesc的值于open返回值无关,编译器这里不会报错。容易被忽视,

达不到检查效果。

1.2 & 和 | 不同于 && 和 ||

&和|均为按位运算符,而&& 和 || 均为逻辑运算符,不能混淆。

1.3 语法分析中的“贪心法” 当C编译器读入一个字符后又跟了一个字符,那么编译器就必须做出判断:是将其作为两个

分别的符号对待,还是合起来作为一个符号对待。C语言对这个问题的解决方案可以归纳为

一个很简单的规则:每一个符号应该包含尽可能多的字符。

a---b 与 a -- - b 的含义相同,而与 a - -- b 的含义不同。

1.4 整型常量

如果一个整形常量的第一个字符是数字0,那么该常量将被视作八进制数。因此,10

和010是完全不同的含义。此外书中还介绍了一些ANSI C不允许的做法,比如将8

和9也作为八进制数字处理。

1.5 字符和字符串

C语言中的单引号和双引号含义迥异,在某些情况下如果把两者弄混,编译器并不会检测报

错,从而在运行是产生难以预料的结果。

用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字

符集中的序列值。

用双引号引起的字符串,代表的却是一个指向无名数字起始字符的指针,该数组被双引

号之间的字符以及一个额外的二进制为零的字符''初始化。

然而,某些C编译器对函数参数并不进行类型检查,特别是对printf函数的参数。因此,

如果用

printf(' ');

来代替正确的

printf(" ");

则会在程序运行的时候产生难以预料的错误,而不会给出编译器诊断信息。

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新资格考试认证《C陷阱与缺陷》笔记全文阅读和word下载服务。

《C陷阱与缺陷》笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1186469.html(转载请注明文章来源)

相关推荐:

热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top