代码里面经常遇见宏定义里面追加 do{ } while(0);的情况
查了下资料总结了一下,认为主要原因有两个
1:防止空定义宏,代码编译不过。
2:防止二义
例:
#define NS_FUNC() func1(); \
func 2();
上面函数在执行以下处理的时候 。会出错,错误明显,func 2()必然执行~
if (exp)
NS_FUNC() ;
变更定义:
#define NS_FUNC() { \
func1(); \
func 2(); \
}
上述定义在,执行以下处理的时候,编译可能有错误
if (exp) {
NS_FUNC();
}
else {
func3();
}
所以,使用 do { } while(0) 将定义的模块封成一个整体,更好。
以上属于个人理解,如果有更好的见解,可以分享一下~