为什么说do while(0) 妙?因为它的确就是妙,而且在linux内核中实现是相当的妙,我们来看看内核中的相关代码:
#define db_error(fmt, ...) \
do { \
fprintf(stderr, "(error): "); \
fprintf(stderr, fmt, ##__VA_ARGS__); \
} while (0)
这只是个普通的调试信息的输出,有人便会认为,你这不是多此一举吗?去掉do while(0)不一样也实现了吗?其实不然,我们看看例子就清楚了,尽管很简单:
int main(void)
{
while(0)
{
printf("hello world\n");
}
do
{
printf("hello world1\n");
}while(0);
return 0 ;
}<