- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第14章 程序常见的错误、调试 14.1 程序的调试 C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不像其他高级语言那么严格,这就给编程人员留下“灵活的余地”,但同样由于这个灵活给程序的调试带来了许多不便。尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误,看着有错的程序,不知该如何改起。下面介绍一些C语言使用过程中编程时常犯的错误,以供参考。 14.1.1 好的程序编写习惯 (1)应该特别注意程序的书写格式,让它的形式反映出其内在的意义结构。 (2)用最规范的、最清晰的、最容易理解的方式写程序。注意人们用C语言写程序的习惯写法,例如书中解决类似问题时所使用的写法,在本书中有许多极好的程序实例可供参考。 (3)在编程中,应仔细研究编译程序给出的错误信息和警告信息,弄清楚每条信息的确切根源并予以解决。特别是不要忽略那些警告信息,许多警告信息源自隐含的严重错误。我们有许多办法去欺骗编译程序,使它不能发现程序中的错误,但这样做最终受到伤害的只能是自己。 (4)随时注意表达式计算过程和类型。注意运算符的优先级和结合顺序,不同类型的运算对象将怎样转换,运算的结果是什么类型的,等等。在必要的时候加上括号或显式的类型强制转换。 (5)绝不去写依赖于运算对象求值顺序的表达式。对于普通二元运算符的运算对象,函数调用的各个实参C语言都没有规定特定求值顺序。因此,不应该写那种依赖于特定求值顺序的表达式,因为不能保证它一定得到什么结果。 (6)总保证一个函数的定义点和它的所有使用点都能看到同一个完整的函数原型说明。 (7)总注意检查数组的界限和字符串(也以数组的方式存放)的结束。C语言内部根本不检查数组下标表达式的取值是否在合法范围内,也不检查指向数组元素的指针是不是移出了数组的合法区域。写程序的人需要自己保证对数组使用的合法性。越界访问可能造成灾难性的后果。 (8)绝不对空指针或者悬空的指针做间接访问。这种访问的后果不可预料,可能会造成系统的破坏,也可能造成操作系统发现这个程序执行非法操作而强制将其终止。 (9)对于所有通过返回值报告运行情况或者出错信息的库函数,都应该检查其执行是否正常完成。如果库函数没有完成操作(可能因为各种原因),随后的操作有可能就是非法的。这种错误也可能在程序运行中隐藏很长时间,到最后才暴露出来,检查错误非常困难。 (10)在带参数宏的定义字符串中,一般应该给整个字符串和其中出现的每个参数都加括号。 (11)所有外部变量名字和所有函数名字应该只靠前6个字符就能够互相区分。因为有些老的编译程序只关注这些名字的前6个字符。如果不注意这个问题,就可能引起隐含的连接错误。 14.1.2 C语言编写时容易出现的错误 (1)书写标识符时,忽略了大小写字母的区别。 #include stdio.h main() { int a=5; printf(%d,A); } 编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写表示,变量名用小写表示,以增加可读性。 (2)忽略了变量的类型,进行了不合法的运算。 #include stdio.h main() { float a,b; printf(%d,a%b); } %是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行求余运算。 (3)将字符常量与字符串常量混淆。 char c; c=a; (4)忽略了=与==的区别。 在许多高级语言中,用=符号作为关系运算符等于。如在BASIC程序中可以写: if (a=3) then … 但C语言中,=是赋值运算符,==是关系运算符。 (5)忘记加分号。 分号是C语句中不可缺少的一部分,语句末尾必须有分号。 a=1 b=2; 编译时,编译程序在a=1后面没发现分号,就把下一行b=2也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看上一行是否漏掉了分号。 (6)多加分号。 对于一个复合语句,如: { z=x+y; t=z/100; printf(%f,t); }; 复合语句的花括号后不应再加分号,否则将会画蛇添足。 (7)输入变量时忘记加地址运算符。 int a,b; scanf(%d%d,a,b); 这是不合法的。scanf函数的作用是:按照a,b在内存中的地址将a,b的值存储进去。a指a在内存中的地址。 (8)输入数据的方式与要求不符。 (9)输入字符的格式与要求不一致。 在用%c格式输入字符时,空格字符和转义字符都作为有效字符输入。
您可能关注的文档
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第1章 进程、线程与网络协议.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第2章 TCP应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第3章 UDP应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第4章 P2P应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第5章 SMTP与POP3应用编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第6章 网络数据加密与解密.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯2 第7章 三维设计与多媒体编程.ppt
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯习题答案 第01章 习题解答.doc
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯习题答案 第02章 习题解答.doc
- C#网络应用高级编程 教学课件 作者 马骏 郑逢斌 沈夏炯习题答案 第03章 习题解答.doc
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第十一章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第十章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第四章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第五章.PPT
- C_C++程序设计教程与上机实训 教学课件 作者 于文强 程立福 毛慧凤 第一章.PPT
- C++ Builder 6程序设计教程 教学课件 作者 陆卫忠 刘文亮 等 第二章简单应用程序设计.ppt
- C++ Builder 6程序设计教程 教学课件 作者 陆卫忠 刘文亮 等 第九章多媒体与图形处理.ppt
- C++ Builder 6程序设计教程 教学课件 作者 陆卫忠 刘文亮 等 第六章c++Builder数据库开发环境.ppt
- C++ Builder 6程序设计教程 教学课件 作者 陆卫忠 刘文亮 等 第七章数据库应用程序设计.ppt
- C++ Builder 6程序设计教程 教学课件 作者 陆卫忠 刘文亮 等 第十一章c++Builder高级应用.ppt
文档评论(0)