欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;