- 1、本文档共14页,可阅读全部内容。
- 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,C编程误,while使用等
do...while(0)的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。????但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。
1. do...while(0)消除goto语句。通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样:version 1
bool?Execute(){???//?分配资源???int?*p?=?new?int;???bool?bOk(true);???//?执行并进行错误处理???bOk?=?func1();???if(!bOk)????{??????delete?p;?????????p?=?NULL;??????return?false;???}???bOk?=?func2();???if(!bOk)????{??????delete?p;?????????p?=?NULL;??????return?false;???}???bOk?=?func3();???if(!bOk)????{??????delete?p;?????????p?=?NULL;??????return?false;???}???//?..........???//?执行成功,释放资源并返回????delete?p;???????p?=?NULL;????return?true;???}这里一个最大的问题就是代码的冗余,而且我每增加一个操作,就需要做相应的错误处理,非常不灵活。于是我们想到了goto:version 2
bool?Execute(){???//?分配资源???int?*p?=?new?int;???bool?bOk(true);???//?执行并进行错误处理???bOk?=?func1();???if(!bOk)?goto?errorhandle;???bOk?=?func2();???if(!bOk)?goto?errorhandle;???bOk?=?func3();???if(!bOk)?goto?errorhandle;???//?..........???//?执行成功,释放资源并返回????delete?p;???????p?=?NULL;????return?true;errorhandle:????delete?p;???????p?=?NULL;????return?false;???}代码冗余是消除了,但是我们引入了C++中身份比较微妙的goto语句,虽然正确的使用goto可以大大提高程序的灵活性与简洁性,但太灵活的东西往往是很危险的,它会让我们的程序捉摸不定,那么怎么才能避免使用goto语句,又能消除代码冗余呢,请看do...while(0)循环:version3
bool?Execute(){???//?分配资源???int?*p?=?new?int;???bool?bOk(true);???do???{??????//?执行并进行错误处理??????bOk?=?func1();??????if(!bOk)?break;??????bOk?=?func2();??????if(!bOk)?break;??????bOk?=?func3();??????if(!bOk)?break;??????//?..........???}while(0);????//?释放资源????delete?p;???????p?=?NULL;????return?bOk;???}“漂亮!”, 看代码就行了,啥都不用说了...
2 宏定义中的do...while(0)??如果你是C++程序员,我有理由相信你用过,或者接触过,至少听说过MFC, 在MFC的afx.h文件里面, 你会发现很多宏定义都是用了do...while(0)或do...while(false), 比如说:#define AFXASSUME(cond)???????do { bool __afx_condVal=!!(cond); ASSERT(__afx_condVal); __analysis_assume(__afx_condVal); } while(0)粗看我们就会觉得很奇怪,既然循环里面只执行了一次,我要这个看似多余
您可能关注的文档
- C Prime 中文版(第四版)学习笔记.doc
- c 中 expicit关键字的含义和用法.doc
- C 中通过溢出盖虚函数指针列表执行代码.doc
- C++(C)多线编程之一.docx
- C++程序设计大实验(精品课程)大纲.docx
- C++程序设计教(第二版)钱能学习笔记.doc
- C++程序设计教大纲(初级中级).doc
- C++程序设计模试题及答案.docx
- C++程序设计练(答案).doc
- C++程序语言模试题及答案.doc
- 小学科技社团活动对学生创新思维培养的实证研究教学研究课题报告.docx
- 中国宠物医疗市场规模2025年增长趋势分析:市场潜力与竞争格局.docx
- 电力设备有限公司顶岗试题及答案.docx
- 初中课间休息时段安全教育课程设计与应用教学研究课题报告.docx
- 小学语文阅读教学中文学鉴赏与审美能力培养研究教学研究课题报告.docx
- 新能源汽车零部件供应链韧性建设与市场拓展策略报告.docx
- 初中物理实验教学中人工智能教育资源整合与创新实践研究教学研究课题报告.docx
- 职业教育数字化转型政策支持下的在线学习平台创新趋势报告.docx
- 2025年老年大学数字化教学资源建设对老年人认知水平提升影响.docx
- 物流操作试题及答案.docx
文档评论(0)