zoukankan      html  css  js  c++  java
  • do{}while(0)

    有时会在源码中或在写代码时在宏定义中用到do...while(0).

    采用这种方式进行宏定义, 主要是为了防止出现以下错误 :

    do{}while(0)

    1. 空的宏定义避免出现warnning.

      #define foo() do{}while(0)
      
    2. 存在一个独立的操作, 可以进行变量定义, 进行比较复杂的实现.

    3. 若果出现在判断语句过后的宏, 这样可以作为一个整体来实现.

      #define foo(x)	
      	action1();	
          action2();
      

      在以下情况中就会出错 :

      if (NULL == pointer)
      	foo();		//在这种情况下就会出现 action1, action2不会被同时执行的情况。
      

    使用do{}while(0)原因

    以上三种情况均可以用{}, 实现,但为什么一定要用do{}while(0).

    比如 :

    #define switch(x,y) {int tmp; tmp =x; x = y; y = tmp;}
    if (x > y)
    	switch(x,y);	
    else	//出现编译错误,宏引入代码后多一个分号
    	otherAction();
    

    将宏用do{}while(0)将宏包裹起来使其成为一个独立的语法单元, 从而不会与上下文发生混淆, 同时大部分编译器能够识别 do{}while(0) 这种无用的循环, 并对其进行优化, 所以使用这种方法不会导致性能的降低.

  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/0xfffffff0/p/10370263.html
Copyright © 2011-2022 走看看