一:do{...}while(0)在定义宏时的作用。其实就是能够让你定义的宏按照你期望的方式执行而没有语法或逻辑错误,无论这个宏是在if判断里面使用还是放在其他别的地方使用。
1.在后面要加分号,使调用如同函数,例如
#define DELETE_POINTER(p) \
do \
{ \
if(NULL != p) \
delete p; \
p = NULL; \
} \
while(0)
调用:
int a = 0;
int * p = &a;
DELETE_POINTER(p);
2.当放在if中使用时
#define FUN() \
fun1(); \
fun2();
这个宏的意思是,当调用FUN()宏时,同时调用fun1()和fun2(),但是如果这个宏在调用的时候是放在if判断判断下面的,那么
if(a > 0)
FUN();
展开后变成
if(a > 0)
fun1();
fun2();
这样就变成无论a是否大于零,那么fun2()都会被执行。
而如果用do while(0)代替,那么就能够按照实际期望的那样被执行
3.当放在if else中使用时
#define FUN() \
fun1(); \
fun2();
二:do{...}while(0)可以替换goto语句
原文地址:https://www.cnblogs.com/cumtchw/p/10076771.html