详细可以参考这个帖子:do-while-0
总结两个主要的用法:
1. 在处理资源时,简化错误处理代码
do {
// do something
if (error) {
break;
}
// do something else
if (error) {
break;
}
// success handle
} while (0);
// error handle
当遇到错误时,会从循环跳出来,然后在error handle处释放资源,假如都没有出错,则执行success handle操作并且返回(另一种做法是使用goto)
2. 在宏定义时,用于定义多条语句,避免遇到写if语句不写{}这种情况(这个绝对是个坏习惯)
#define FOO(x) do { foo(x); bar(x); } while (0)
if (condition)
FOO(x);
else
....