`
阅读更多
从一些经典代码中常常看到宏中使用do...while(0)的用法,感觉上do...while(0)只是在有可能要中途跳出后续一段代码的时候替换goto的一种用法,其他的就不求甚解了。

今天总算看到了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...while(0)呢,直接使用大括号不就好了么?

不错,只要在宏中使用大括号就可以把多条语句合成一条语句了。不过,大括号并不是个天山雪莲般可治百病的灵药哟。

看看直接使用大括号的程序吧。

    #define DO_SOMETHING() {\
        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工具并不是告诉我这样做违反编程规范,只是想提醒我要养成良好的遵守编程习惯吧
分享到:
评论

相关推荐

    部分关键字过滤,防止用户使用一些不合理的名称注册

    其中一个重要方面是防止用户使用不合理或违规的名称进行注册。这不仅涉及到用户体验的问题,更是关乎网络安全、内容审查以及法律合规性等多方面的考量。本文将深入探讨这一主题,包括其重要性、实现方法以及可能遇到...

    众人帮悬赏主考试答案.doc

    2. **违规后果**:违反平台规则,如发布不合理或违规悬赏,可能导致账号受限或被封禁,影响悬赏主的信誉和收益。 3. **悬赏发布**:发布悬赏需依据平台的“发布悬赏须知标准”和“最低赏金标准”,不能盲目跟风,...

    海南省新农合智能审核系统审核PPT学习教案.pptx

    若无法通过医院反馈判断,合管办会进行现场稽查,通过多方面证据确认是否存在不合理或违规行为。此外,警示级别的设置为问题严重度提供了参考,但并不直接决定业务操作,而是帮助指导后续处理。 系统还特别关注特定...

    2021-2022年精品资料创业杯数控车床技能大赛试题.docx

    - 安全文明生产和工艺合理性:包括遵守安全操作规程、刀具和工件的摆放、设备保养、工艺流程设计等,不合理或违规操作会扣分。 3. **程序编制**: - 程序完整性:要求指令正确,程序完整,数值计算准确,体现编程...

    App违法违规收集使用个人信息自评估指南(word版).pdf

    总结起来,App运营者应严格遵循《网络安全法》、《消费者权益保护法》等法律法规,参照国家标准,确保透明、合理地收集和使用个人信息,同时建立完善的安全防护机制和用户权益保障体系,以防止违法违规行为的发生。...

    车辆违规管理系统车辆违规管理系统.docx

    - **作用**:限制了系统存储违规记录的能力,有助于合理规划内存资源。 #### 2. 初始积分 `MAX_SCORE_VALUE` - **定义**:`#define MAX_SCORE_VALUE 20` 定义了每个车辆或驾驶员的初始积分值为20分。 - **作用**:...

    淘宝违规处罚考试节手机类目下,商品发布信息合理的是.doc

    18. **评价规范**:买卖双方的评价应真实客观,禁止利用评价进行敲诈或其他不当行为。 19. **规则变更通知**:淘宝会通过规则频道公告、帮助中心公告等方式通知用户规则变更。 20. **退款申请时间**:买家付款后,...

    xx年京东咚咚使用违规以罚代考试题.doc

    6. **咚咚违规处罚**:违规使用咚咚可能会导致扣2分、4分或5分的处罚。 7. **咚咚考核指标**:京东开放平台风向标考核的咚咚使用指标包括咚咚30秒应答率和咚咚平均响应时长。 最后,咚咚满意度的计算案例表明,...

    违规改造和砂浆强度对砌体结构房屋动力性能的影响

    然而,在改造过程中,如果施工不当或设计不合理,往往会带来一系列建筑安全问题。本研究通过有限元模拟方法,探讨了违规改造和砂浆强度降低对砌体结构房屋动力性能的影响。 首先,论文中提到的违规改造主要包括擅自...

    违规抽烟-视觉识别算法样本数据集.zip

    同时,随着技术的进步,未来可能会实现更精确的个体识别,以便对违规者进行警告或采取相应措施。 总结来说,"违规抽烟-视觉识别算法样本数据集"是一项旨在利用深度学习和计算机视觉技术解决社会问题的尝试。通过对...

    App违法违规收集使用个人信息自评估指南 PDF 版

    政策内容应表述清晰,逻辑结构合理,避免出现复杂的法律术语和行话,使普通用户能够理解其内容,充分认识到自己的信息权利和保护措施。 《指南》进一步指出,隐私政策应详细描述App的各项业务功能及其所需收集的...

    app违法违规收集使用个人信息自评估指南.docx

    《APP违法违规收集使用个人信息自评估指南》是一份旨在帮助开发者和运营者确保其应用程序符合法律法规,尊重并保护用户隐私的重要文档。以下是对这份指南主要内容的详细解析: 1. **目的和合法性**:APP应明确收集...

    App违法违规收集使用个人信息自评估指南借鉴.pdf

    最后,隐私政策不应包含不合理条款,如免除自身责任、加重用户责任或排除用户主要权利。这些行为都是对用户权益的侵犯,与法规要求相悖。 总的来说,这份指南为App运营者提供了全面的框架,以确保他们在收集和使用...

    【数学建模】【美赛】优秀论文+违规论文示例.rar

    本压缩包文件"【数学建模】【美赛】优秀论文+违规论文示例.rar"中包含了两部分重要的学习资源:优秀论文和违规论文示例,这对于参赛者或对数学建模感兴趣的读者来说,是非常宝贵的学习材料。 优秀论文部分: 1. **...

    特殊违规及处理方式 DOC格式 免费下载.DOC

    因此,对于B类违规,公司通常会采取更加严格的措施,首次违规就可能导致停职或解雇,以迅速制止不当行为,保护公司利益不受侵害。 具体违规行为的举例,为员工提供了更为明确的界限。例如,A类违规行为还可能包括...

    装修施工违规操作处罚规定.pdf

    根据规定,装修施工违规操作被划分为四个等级,每一种违规行为都对应着不同的罚款标准和处理方式,明确的梯度处罚有助于对不同程度的违规行为作出公正合理的处理。 一级违规行为是最为常见的不当施工行为,例如不...

    贷款违规处理办法.pdf

    这些措施的适用性充分考虑了违规行为的性质和责任,体现了处理的公正性和合理性。特别是对于在职、退休甚至调离员工的违规行为,都有相应的处理规定,显示了黑龙江省农村信用社对内部管理的严格要求和长期性的考虑。...

    违规过失处分单.doc

    1. **违规过失定义**:违规过失通常指的是员工违反公司内部制定的规章制度、工作流程或者职业道德,这些行为可能对公司的正常运营、团队和谐或客户关系造成负面影响。 2. **过失人信息**:在处分单中,需要详细列出...

    公司违纪违规处罚条例.doc

    在这一基础上,条例强调处罚与教育相结合的原则,即在对违规行为进行处罚的同时,也注重对员工的教育和引导,促使员工深刻认识到违规行为的严重性和对公司的不良影响,从而达到预防和减少违纪违规行为的目的。...

Global site tag (gtag.js) - Google Analytics