宏定义中的do...while(0)

 

经常看到类似宏定义,do{...}while(0)

#define SAFE_DELETE(p) do{ delete p; p = NULL} while(0)

如果去掉do{...}while(0),如下代码:

if(NULL != p) SAFE_DELETE(p)
else ...do sth...

将导致两个问题:

1)if语句后面有两个语句,无论测试是否通过,第二个语句都会得到执行

2)else语句没有对应的if语句对应


 

 

 

 

 

 

 


你可能感兴趣的:(宏定义中的do...while(0))