do
{
....
}while(0)
#define foo(params) /
do{ /
//instructions /
}while(0)
为什么要用其do...while(0)的根本愿意在于你的#define 中超过两条表达式(包括两条)以上,下面的例子如果你的#define只有一条,那do...while(0)就没有意义了~~
if(x = 1)
foo(x);
else
...
其实编译器并不会增加更多的指令,起初我认为可能会增加额外的指令,没想到C编译器竟然是自动对条件0的代码进行过优化的。
请看来在c-faq的解释。