- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中级教程 错误处理-16ppt课件
错误处理 目标 了解错误检查和错误处理的方法,从而提高编码的质量 目录 概述 错误检查 错误处理 概述 错误的分类 不应该发生的错误 “应该发生”的错误 错误处理的几个方面 错误检查 发生异常错误时的处理 返回错误 错误处理的原则 输入垃圾,不能输出垃圾 错误检查 断言 检查输入参数 检查内部调用函数的返回值 错误检查与性能的平衡 错误检查——断言(ASSERT) 用于检查“不应该发生的错误” 。 仅在Debug版本起作用。 如果程序在assert处终止了,并不是说含有该assert的函数有错误,而是调用者出了差错,assert可以帮助我们找到发生错误的原因。 对于内部使用的函数,通常可以用断言,而对于提供给外部使用的函数,最好使用错误处理。 错误检查——断言(ASSERT) 一个例子 void *memcpy(void *pvTo, const void *pvFrom, size_t size) { /*使用断言*/ assert((pvTo != NULL) (pvFrom != NULL)); byte *pbTo = (byte *) pvTo;//防止改变pvTo的地址 byte *pbFrom = (byte *) pvFrom;//防止改变pvFrom的地址 */ while(size -- 0 ) *pbTo ++ = *pbFrom ++ ; return pvTo; } 错误检查——断言(ASSERT) 使用assert时需要注意: 在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查 assert不应该产主其他的副作用,因为assert在release版是不执行的 Assert((a = b));//a=b在release版不执行,错误 错误检查——检查输入参数 检查输入的内核对象Handle是否有效,如线程handle、event handle、文件handle等 if( INVALID_HANDLE == inputHandle) { … } 检查指针是否为NULL if( NULL == inputPtr) { … } 检查参数的取值范围是否符合对它的限制,对数组下标和偏移量尤其要检查,因为一个不合法的数组小标和偏移量会导致非法的内存访问 If(( 0offset) || ( offset=maxSize) {…} If(( 0 = day ) || ( day 31 )) { … } 错误检查——检查输入参数 int noteL03_FAC_MakeDetail(MarkID_t *pstMarkID, void *pResult) { …… do{ if( (NULL == pResult)||(NULL == pstMarkID) ) break; }while(false); …… } int noteL99_GetFileNameAndCateInfo(int index, ……, INNOTE_CateInfo_t *pstCateInfo) { …… do{ if( index 0 || index = INNOTE_DB_FILE_MAX ) break; *pstCateInfo = stNoteManageInfo.stCateInfo[index]; …… }while(false); …… } 错误检查——检查函数返回值 内核对象操作 fileHdl = noteL99_FileOpen(fName, O_BINARY|O_RDONLY, S_OREAD); if( fileHdl 0 ) break; 内存操作 buffHdl = noteL99_AssignMemory( buffSize ); if( buffHdl 0 ) break; pBuff = noteL99_LockMemory( buffHdl ); if( NULL == pBuff ) break; 一般函数的返回值 对所有函数的返回值进行判断,除非该函数没有返回值 错误检查与性能的平衡 过多的错误检查会影响性能 为了减少调用者的负担,如果函数任何情况下都不会出错,就不要有返回值 要避免重复的,无效的错误检查 对于“不应该发生”的错误,使用断言在开发阶段发现错误,发布以后就不进行错误检查了 错误处理 常用错误处理的方式 返回错误信息的几种方式 错误处理的实践 常用错误处理的方式 把错误校正,并输出正确的结果 函数的容错性很好,但是会隐藏调用者的错误 大部分情况下,因为错误是不能校正的,
您可能关注的文档
- 2011红鹤沟通青岛高端项目推广策略ppt课件.ppt
- 2011高考现代文阅读___如何分析文章标题ppt课件.ppt
- 2011首次期货投资分析真题讲解ppt课件.ppt
- 2011年神经本科(5年制).ppt
- 2012届浙江湘教版学海导航新课标高中总复习(第1轮)地理:模块1必修1第3章第4课常见的热力环流及其成因2.ppt
- 2012大学英语四级考试做题技巧.ppt
- 2011王立福的软件工程课件(自学考试)ppt课件.ppt
- 2012届浙江湘教版学海导航新课标高中总复习(第1轮)地理:模块2必修2第4章第1课_人类面临的主要环境问题ppt课件.ppt
- 2011珠江珠纺城推广方案ppt课件.ppt
- 2012年中考复习建议.ppt
最近下载
- 明代故宫、孔府旧藏服饰.pdf VIP
- 中考物理总复习《力学》专项练习题(附答案).docx
- 2025年春新人教PEP版英语三年级下册课件 Revision Going to a school fair-第2课时.pptx
- 春节文艺活动劳务合同6篇.docx
- 局领导班子成员之间相互批评意见清单(6).doc VIP
- 2025年1月必威体育精装版版化危为安ccsc每日答题题库和配套答案(持续更新中).docx
- 应用数理统计基础课后习题答案(全)-庄楚强.pdf
- 《民法典》无效合同处理规则适用要点解析.docx
- 农商银行董事会换届工作报告(三年工作总结及下届工作思路).docx
- 2023-2024学年江苏省盐城市高二下学期6月期末考试化学试题(解析版).docx
文档评论(0)