do...while(0)妙用
程序员文章站
2024-03-23 20:31:58
...
1、使宏定义更安全
2、在需要错误处理时,减少代码冗余度和goto的使用
1、假设有如下代码:
#define p {A;B}
...
if(COND)
p;//不符合编程习惯————通常语句后加分号
else
....
当然,如果上述语句不加分号,是不会出现问题的。用do…while(0)的好处是可以将加分号贯彻到底。
#define p do{A;B;}while(0)
2、处理错误时
想象一下以下代码:
if(error1)
{
A;
B;
}
if(error2)
{
A;
B;
}
if(error3)
{
A;
B;
}
代码冗余度很高。可以使用goto,导向同一段errorhandle代码:
if(error1)
{
goto errorhandle;
}
if(error1)
{
goto errorhandle;
}
if(error1)
{
goto errorhandle;
}
...
errorhandle:
A;
B;
然而,过多使用goto会导致我们的程序飘忽不定、难以预测。如何既降低冗余度,又提高可读性呢?
答案是使用do…while(0)
do{
if(error1)
break;
if(error2)
break;
if(error3)
break;
}while(0);
A;
B;