- 浏览: 34993 次
最新评论
从一些经典代码中常常看到宏中使用do...while(0)的用法,感觉上do...while(0)只是在有可能要中途跳出后续一段代码的时候替换goto的一种用法,其他的就不求甚解了。
今天总算看到了wiki上对do...while(0)的解释,算是解了心中的一个疑惑。
一种情况是,这种用法可以避免在if/for下使用宏时,由于宏中的多个语句遗漏大括号而造成流程错误。就像下面这一段代码,可算是个明显的错误了。
要是使用do...while(0)将DO_SOMETHING()宏改成这样,就可以避免上述的错误了。
这可就有一个疑问了,何必加上do...while(0)呢,直接使用大括号不就好了么?
不错,只要在宏中使用大括号就可以把多条语句合成一条语句了。不过,大括号并不是个天山雪莲般可治百病的灵药哟。
看看直接使用大括号的程序吧。
看出问题了么?由于if语句下的宏后多的那个小小的分号,if下的一个语句就变成了两个语句,随后的else可就会提示你语法错误喽
而使用之前do...while(0)的宏就不会有这个问题,这也就是do...while(0)的第二个用处了。
当然,以上说的这些都是一种无奈的保护机制。如果保持一个良好的编程习惯,比如在if和else后面紧跟大括号,就不需要在乎宏上的do...while(0)了。
只是,可惜的是,当我把do...while(0)使用到公司的代码中时,却发现这触犯了Lint工具的检测规范,而直接给了我违规的结论。无奈之下,只得把do...while(0)全部删除。
或许,Lint工具并不是告诉我这样做违反编程规范,只是想提醒我要养成良好的遵守编程习惯吧
今天总算看到了wiki上对do...while(0)的解释,算是解了心中的一个疑惑。
一种情况是,这种用法可以避免在if/for下使用宏时,由于宏中的多个语句遗漏大括号而造成流程错误。就像下面这一段代码,可算是个明显的错误了。
#define DO_SOMETHING() DO_A();\
DO_B(); \
DO_C()
//
if (CONDITION_A)
DO_SOMETHING();
要是使用do...while(0)将DO_SOMETHING()宏改成这样,就可以避免上述的错误了。
#define DO_SOMETHING() do{ \
DO_A(); \
DO_B(); \
DO_C(); \
}while(0)
DO_A(); \
DO_B(); \
DO_C(); \
}while(0)
这可就有一个疑问了,何必加上do...while(0)呢,直接使用大括号不就好了么?
不错,只要在宏中使用大括号就可以把多条语句合成一条语句了。不过,大括号并不是个天山雪莲般可治百病的灵药哟。
看看直接使用大括号的程序吧。
#define DO_SOMETHING() {\
DO_A(); \
DO_B(); \
DO_C(); \
}
//
if (CONDITION_A())
DO_SOMETHING();
else
DO_SOMETHING_ELSE();
DO_A(); \
DO_B(); \
DO_C(); \
}
//
if (CONDITION_A())
DO_SOMETHING();
else
DO_SOMETHING_ELSE();
看出问题了么?由于if语句下的宏后多的那个小小的分号,if下的一个语句就变成了两个语句,随后的else可就会提示你语法错误喽
而使用之前do...while(0)的宏就不会有这个问题,这也就是do...while(0)的第二个用处了。
当然,以上说的这些都是一种无奈的保护机制。如果保持一个良好的编程习惯,比如在if和else后面紧跟大括号,就不需要在乎宏上的do...while(0)了。
只是,可惜的是,当我把do...while(0)使用到公司的代码中时,却发现这触犯了Lint工具的检测规范,而直接给了我违规的结论。无奈之下,只得把do...while(0)全部删除。
或许,Lint工具并不是告诉我这样做违反编程规范,只是想提醒我要养成良好的遵守编程习惯吧
发表评论
-
入职第一天
2004-07-12 20:20 518很喧闹的一天新人训。当然,可以说是激情四射,或者说是嘈杂无聊。 ... -
迎接部门训
2004-07-13 18:07 477今天开始迎接部门的专业训了,C#、SQL Server、数据库 ... -
生活的颜色
2004-07-14 18:57 515一个诚实的裁判就这样慷慨赴义了,很多很多黑暗中的裁判们却还好端 ... -
历史的沉思
2004-07-16 12:43 611很久以前的一篇文章, ... -
选择的未来
2004-07-17 15:11 455先提一个问题:做一个技术员,技术能力重要还是业务知识重要?再提 ... -
统一的困惑
2004-07-19 20:45 485RUP(Rational统一过程)的基本开发方式是迭代。需求迭 ... -
开发的效率
2004-07-21 17:44 498面对多人协同开发的分层系统,有两种开发方式:其一、一人负责一到 ... -
模型或模式
2004-07-22 23:27 600不论是吵吵嚷嚷的软件工程、XP建模,还是死灰复燃的MDA、一心 ... -
对象的效率
2004-07-28 21:22 504面向对象带来方便的同时亦带来很多的问题。类的继承在扩展的同时也 ... -
泪写的文章
2004-07-29 20:20 482今天我又哭了。一个月前,我还觉得哭于我是很遥远的事情。甚至,我 ... -
期待的精彩
2004-07-31 11:08 498好久好久没有看到国足这么酣畅的胜利了,好久好久没有体会到看球的 ... -
转载的文章
2004-08-01 10:50 475今天转载一篇吧,记录一段可笑的过往。 别了,Dr.Dobb's ... -
TDD 心得
2004-08-03 16:19 746一直觉得,近年来,真正有意义的技术或者思想只有两个:Refac ... -
近期的任务
2004-08-06 12:54 5421、Test Driven Development2、Java ... -
上海印象一
2004-08-09 22:28 527车一进入上海,扑面而来的就是一片一片的高楼,黑压压地便压了过来 ... -
上海印象二
2004-08-10 21:19 475上海当然是天堂,但也是仅对一部分人一部分地区。对大多数人大部分 ... -
转载的文章
2004-08-13 23:38 417O/R Mapping中的继承~ http://www.cnb ... -
生日的祝福
2004-08-15 10:49 674今天是agate的生日。尽管这句话已经被用得很俗,不过我还是想 ... -
等爱的狐狸
2004-08-27 18:16 525“对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不 ... -
飞翔的寓言
2004-08-30 20:58 472我才发现梦想与现实间的差别逆着风让自己体验每一个感觉就像是寓言 ...
相关推荐
淘宝违规处罚考试节手机类目下,商品发布信息合理的是.doc
此外,通过对$$ \ varepsilon $$ε的分析,我们推测了违反Lorentz的术语$$ {\ bar {s}} ^ {\,00} $$s¯00的合理约束, 此数量当前可用的界限。 最后,我们指出,我们的结果具有内在的有效性,超出了点状引力源的...
(3) 具有违规显示功能,并显示违规抢答者代码 设计要求: 1 .分析设计要求,明确性能指标。必须仔细分析课题要求、性能、指标及应用环境等,广开思路,构思出各种总体方案,绘制结构框图。 2 .确定合理的总体方案。...
如果发现违规资源进行积极举报.经我们确认后可以得到50分. (3)可以对CSDN下载社区提些合理的建议及意见.经过采纳可以得到100分. 值得注意的是如果您的分一旦成为正分,下载资源时要记得对资源进行合理的评分。这样...
5 用户针对其他不当言论可对其作品或用户进行投诉,管理员审核,确认违规进行处理,若投诉位违规,则投诉无效,处理结果反馈到投诉者与被投诉者的个人中心 医生 1 医生注册之后需要提供其相关的证件,资格信息,由...
5 用户针对其他不当言论可对其作品或用户进行投诉,管理员审核,确认违规进行处理,若投诉位违规,则投诉无效,处理结果反馈到投诉者与被投诉者的个人中心 医生 1 医生注册之后需要提供其相关的证件,资格信息,...
5 用户针对其他不当言论可对其作品或用户进行投诉,管理员审核,确认违规进行处理,若投诉位违规,则投诉无效,处理结果反馈到投诉者与被投诉者的个人中心 医生 1 医生注册之后需要提供其相关的证件,资格信息,由...
对于不同的控制图规则,随着k的增加,失控点或违规数量Nocp的变化被确定为遵循衰减指数函数Nocp = Ae–α,为此,拟合优度得到确定,而R2值仅对规则#4和#5接近统一。 拟合优度已被确定为是合理的亚组规模范围的新...
2. 宿舍分配管理:根据学生的需求和实际情况,合理分配宿舍资源,提高宿舍利用率。 3. 水电管理:实时监控宿舍水电使用情况,提醒学生及时充值缴费,避免因欠费导致的不便。 4. 报修服务管理:学生可通过系统提交...
现有的Web测试是由前端出发,通过分析页面DOM结构来获取状态与状态...实验结果表明:该方法可以有效地降低“单一DOM对应单一状态”模式中的冗余状态跳转,可以达到合理的功能发现率,同时有效降低冗余的待测试状态。
时间要素作为工作流管理的重要部分,是...应用TC-Net模型进行实例分析,实验结果表明该工作流建模方法对时间违反而导致违规操作具有高敏感性,解决了单个任务违规和流程周期不合理两类问题,实现业务过程的管理和监控。
学生宿舍管理系统是用于管理学生宿舍相关信息和日常运营的软件系统,通常由学校、大学或其他学生宿舍管理机构使用。该系统旨在帮助管理人员有效地安排学生宿舍住宿,提高宿舍资源利用率,以及提供学生舒适安全的居住...
原则上,通过合理选择整体质量参数可以解释质量层次,而费米子混合角则受黄素场破坏的Δ(27)风味对称性的限制,后者对中微子混合参数给出了严格的预测, 和Dirac CP违规阶段,均仅以领先的两个独立参数来描述。...
如今,我国现代化发展迅速,人口比例急剧上升,在一些大型的商场,显得就格外拥挤,私家车的数量越来越多,商场停车难得问题凸显,对于停车场的合理利用有助于缓解用户停车压力,鉴于这样的背景;初步设定系统功能...
如今,我国现代化发展迅速,人口比例急剧上升,在一些大型的商场,显得就格外拥挤,私家车的数量越来越多,商场停车难得问题凸显,对于停车场的合理利用有助于缓解用户停车压力,鉴于这样的背景;初步设定系统功能...
参与对象范围 董事、高级管理人员、核心技术(业务)人员,如对上诉以外人员成为激励对象的,上市公司应在股权激励计划备案材料中逐一分析其与上市公司业务或业绩的关联程度,说明其作为激励对象的合理性 ...
余额可以反映银行对资金的利用情况,如果余额过多,说明资金没有得到合理的运用。贷款 数额是指借款人与放款人签订的合同数额,是一个不变的数额。贷款总额是指截止到某一日 以前商业银行已经发放的贷款总和,是企业...
5. **违规记录与处罚**:对于违反座位使用规则的行为,系统记录违规信息,并根据图书馆规定进行相应处罚,维护座位使用秩序。 6. **座位导航**:提供座位导航功能,帮助读者快速找到自己预约的座位,提高图书馆的...
竞赛获奖论文,懂得都懂。 交通事故是目前危害人类生命的第一杀手,而酒后驾车已经成为引发交通事故的重要原因之一,并日益凸现为社会问题,因此必须加强有效...最后对相关问题进行了解答,结果表明,模型是合理和有效的。
Salesforce的GPL合作承诺在提出或继续起诉因涵盖许可的终止而引起的任何法律程序或索赔(防御性诉讼除外)之前,Salesforce承诺将被指控违反以下涵盖许可的个人或实体(“您”)扩大以下规定:固化和恢复,取自GPL...