1. /*
  2. do while 0 的使用方法和意义
  3. */
  4.  
  5. //近期在非常多代码里都看到do while 0的身影。
  6.  
  7. 乍一看,这不是没有做不论什么事情吗?为什么还要这样写。难道这是多此一举的吗?当然不是。
  8.  
  9. //1.0 辅助定义复杂的宏。避免引用的时候出错:
  10.  
  11. //如果要定义一个这种宏
  12. #define DOSOMETHING() \
  13. func1();\
  14. func2();
  15. //调用
  16. int a = 3;
  17. if(a > 3)
  18. DOSOMETHING()
  19. //展开事实上是这种
  20. if (a > 3)
  21. func1();
  22. func2();// 无论如何fun2都要运行了
  23.  
  24. //如果包裹起来,展开的时候就应该是这样
  25. if(a > 3)
  26. //两个函数都能被运行到
  27. do{
  28. func1();
  29. func2();
  30. }while (0);
  31.  
  32. //2.0避免使用goto对程序流进行统一的控制:
  33. do
  34. {
  35. int *i = new int();
  36. if(i = func1()){break;}
  37. if(i = func2()){break;}
  38. }while(0);
  39.  
  40. //3.0避免空宏引起的warning
  41. //内核中因为不同架构的限制,非常多时候会用到空宏。在编译的时候,空宏会给出warning,为了避免这种warning,就能够使用do{}while(0)来定义空宏:
  42. #define EMPTYMICRO do{}while(0)

版权声明:本文博主原创文章,博客,未经同意不得转载。

C++ do while 0 使用和含义的更多相关文章

  1. 解释代码((n & (n-1))== 0)的含义

    思路:初步查看很难一眼分析出表达式是什么含义,我们不妨举例分析一下,假设 n = 5,二进制表示为101,那么 n-1 = 4,二进制表示为100, 5 & 4 = 101 & 100 ...

  2. AJAX问题 XMLHttpRequest.status = 0是什么含义

    在调用AJAX的时候遇到了XMLHttpRequest. status为0 的情况,http协议里可是没这个状态码的,众所周知,XMLHttpRequest. Status为HTTP请求状态码,一般为 ...

  3. shell脚本中变量$$、$0等的含义

    $0 这个程式的执行名字$n 这个程式的第n个参数值,n=1..9$* 这个程式的所有参数,此选项参数可超过9个.$# 这个程式的参数个数$$ 这个程式的PID(脚本运行的当前进程ID号)$! 执行上 ...

  4. Linux 于 shell 变数 $#,$@,$0,$1,$2 含义解释:

    变量说明: $$ Shell自己PID(ProcessID) $! Shell背景上次执行Process的PID $? 命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 全部參数 ...

  5. shell变量$(CURDIR),$0,$1,$2,$#含义解释

    $(CURDIR):   CURDIR是make的内嵌变量, 为当前目录 实例 SRCTREE := $(CURDIR) *$(CURDIR)为当前目录,相当于SRCTREE=./ MKCONFIG ...

  6. linux中$@,$*,$0,$$,$?参数的含义

    $# 是传给脚本的参数个数 $ 是脚本本身的名字 $ 是传递给该shell脚本的第一个参数 $ 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向 ...

  7. HTML Meta标签中的viewport属性含义及设置

    两篇文章 第1篇文章 第2篇文章 http://blog.hexu.org/archives/1947.shtml 随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移 ...

  8. centreon load average 的含义

    下面图是centreon监控到的 load 信息 其中的 load1,load5,load15 分别说明上一分钟.最后五分钟以及最后十五分钟的系统负载均值.它们的数字当然是越小越好.数字越高,说明服务 ...

  9. 存储专栏:一句话说清RAID2.0

     今天,西瓜哥来谈谈高端存储的一股势力,RAID 2.0,最近被华为HVS搞得风生水起,神奇的让人摸不着头脑.我还是从一个高端存储的江湖说起吧. 据说很久很久以前(别扔臭鸡蛋,讲故事都是这样的…),L ...

随机推荐

  1. WPF命中测试示例(一)——坐标点命中测试

    原文:WPF命中测试示例(一)--坐标点命中测试 命中测试也可被称为碰撞测试,在WPF中使用VisualTreeHelper.HitTest()方法实现,该方法用于获取给定的一个坐标点或几何形状内存在 ...

  2. HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGram

    HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGram ...

  3. HibernateReview Day2–Hibernate体系结构

    本文摘自 李刚 著 <Java EE企业应用实战> 现在我们知道了一个概念Hibernate Session,只有处于Session管理下的POJO才具有持久化操作能力.当应用程序对于处于 ...

  4. ClientID 获取服务端控件,客户端id的方法

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...

  5. 使用NaturalDuration获取音频的时长

    #region customizeTime ) sec = " + mediaElement.Position.Seconds.ToString(); else sec = mediaEle ...

  6. 手把手教popupWindow从下往上,以达到流行效果

    效果如图所看到的,点击開始button,popWindow从下往上出来,再点击popWindow外面,popWindow又从上往下消失 能够看出来,上面的popupWindow是半透明的,后面我会细说 ...

  7. css3仿山猫侧边栏

    演示:http://jsfiddle.net/Adce2/ 其主要思想: 1, 先画边栏html. 2, 使用css3分别财产close sidebar-content动图片. 3, 使用css3的k ...

  8. 使用dom4j创建和解析xml

    之前工作中用到了,相信写java的都会碰到xml,这里写了两个方法,创建和解析xml,废话不多说,直接上代码 package xml; import java.io.File; import java ...

  9. 【LeetCode】Triangle 解决报告

    [称号] Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjac ...

  10. SecureCRT 6.7.1 RI和谐 皴 补丁 方法

    它之前被使用SecureCRT 6.5.3 版本号,咋看和谐补丁,即使中国版本也可(现在才发现SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各种办法: 先 ...