阅读:1791回复:11
do {...} while(0) 这样的代码有什么用?
linux sources里面有好些代码是写成
do {...} while(0) 这样的形式的。这样写有什么用意呢? 和直接写{}里面的语句相比有什么区别呢? |
|
|
沙发#
发布于:2003-05-06 11:22
这种写法相当于window的消息队列,程序不断地取出信息进行处理。
|
|
|
板凳#
发布于:2003-05-06 14:49
一般在宏里使用, 可以避免在宏扩展的时候出现二义性
|
|
|
地板#
发布于:2003-05-06 15:19
原来如此
|
|
|
地下室#
发布于:2003-05-08 13:05
有许多分支结构的程序用 if else 写很不清晰,
do while 加 break 能很好实现不满足条件时不执行后面的代码 应该是实现多分支结构的技巧吧 |
|
|
5楼#
发布于:2003-05-08 14:06
一般在宏里使用, 可以避免在宏扩展的时候出现二义性 这位老兄说的对,一般在定义复杂宏时用的! |
|
|
6楼#
发布于:2003-05-16 14:39
#define MACRO if(...) dosomething
... if (a) MACRO; else somecode; 展开: if (a) if (...)dosomething; else somecode; #define MACRO d0{if(...) dosomething}while(0) ... if (a) MACRO; else somecode; 展开: if (a) do { if (...)dosomething; } while(0); else somecode; 关键在于do while(0)结构只进行一次。 |
|
|
7楼#
发布于:2003-05-17 18:16
hometown说的对,为了避免宏扩展时“;”带来的二义性,所以使用do
{ } while(0) 结构 |
|
8楼#
发布于:2003-05-20 13:06
大家有没有见到不在 宏里的 do{}while(0)
|
|
|
9楼#
发布于:2003-05-26 18:46
哦 原来
if (a) { if (...)dosomething; }; else somecode; 是错误的 |
|
10楼#
发布于:2003-05-26 20:20
哦 原来 这样的代码会有语法错误,还比较容易查出,如果整段代码放到一个不到else的if语句中,又没有用花括弧括起来,那错误就更隐蔽了。 if(condition1) if(condition2) { if(condition3) dosomething; }; else somecode; else将会与if(condition1)配对。 |
|
|
11楼#
发布于:2003-05-27 09:08
所以我现在养成了习惯
不管if else后面是一条还是N条语句 都用{}括起来 |
|
|