ChinaUnix.net
相关文章推荐:

do while(0)

在驱动代码中经常看到如下形式的代码: do{ _ _ gpio_as_output(GPIO_LCD_VCC_EN_N) ; ... } while(0); 或者 #define ENTER() do{...}while(0) 我的问题是为什么要加个do{}while(0) 循环呢,直接写里面的函数调用或者宏定义不行(就是不用do{}while(0)同样执行一次)吗? 或者这样写有什么好处呢,求解释!!!

by hugo_don - 驱动开发 - 2011-09-07 18:50:05 阅读(1997) 回复(8)

相关讨论

as: #define __cpu_raise_softirq(cpu, nr) do { softirq_pending(cpu) |= 1UL << (nr); } while (0)

by valpa - 内核源码 - 2007-09-26 23:12:27 阅读(2507) 回复(9)

大家好,刚才看到有如下的宏定义,没有见过,向大家请教一下。那个(x...)是什么意思,怎么用这个宏,谢谢! #define dbg(x...) do{}while(0);

by linux_kejun - C/C++ - 2010-07-19 10:34:00 阅读(3091) 回复(6)

C 里面可以用do {} while (0) 来简单地模拟C++的异常处理,这个用法很多人都知道了。不过令我有些小小郁闷的是,这种写法在VC(即使是VC2008)总是有一个warning,说条件表达式为常量。 问题:有没有什么办法能够避免这个warning?(在不换编译器,不粗暴地disable这个warning的前提下) 我在网上看到一种解决方案,就是把 while(0) 用 while(__LINE__ == -1)代替,我试了一下,在有些编译器下可以逃掉warning,但是在VC2008下还...

by numdisp - C/C++ - 2010-04-20 13:14:35 阅读(4204) 回复(20)

do...while(0)的妙用 在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。 1. do...while(0)消除goto语句。 通常,如果在一个函数中开始要分配一些资源,然后在中途执行过程中如果遇到错误则退出函...

by sayou678 - Linux文档专区 - 2010-02-02 15:20:21 阅读(764) 回复(0)

#define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因: 1,空的宏定义避免warning: #define foo() do{}while(0) 2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。 3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #define foo(x) \ action1(); \ action2(); 在以下情况下: if(NULL == pPointer) foo(); 就会出现action1和action2不会同时被执行的情况...

by ubuntuer - Linux文档专区 - 2009-12-31 17:59:45 阅读(791) 回复(0)

如题,把一个宏定义成do {} while(0); 到底有什么作用。 请教。

by yjh777 - 内核/嵌入技术 - 2005-12-20 10:52:43 阅读(22286) 回复(29)

如题,把一个宏定义成do {} while(0); 到底有什么作用。 请教。

by yjh777 - 内核源码 - 2005-12-20 10:52:43 阅读(7657) 回复(29)

在读内核源码的时候,时常可以看到 do { } while (0)这样的语句, 不知道这样的语句有什么用处 ?

by weishigoname - 内核源码 - 2012-04-29 16:30:46 阅读(3160) 回复(12)

本帖最后由 yylogo 于 2010-08-19 00:07 编辑 比如 #define swap(a, b) do{\ a ^= b;\ b ^= a;\ a ^= b;\ }while(0)

by yylogo - C/C++ - 2010-08-19 00:06:57 阅读(1513) 回复(4)

内核中有很多宏,展开后是 do { 宏展开后的语句; } while(0) 为什么是一个do ... while,而不直接写"宏展开后的语句;"(大括弧里面的内容)?

by faku - 内核源码 - 2009-09-03 09:11:01 阅读(1526) 回复(6)