c++宏定义
c++宏定义
c++宏往往定义成 do while (0) 的形式。Why?
#define SET_ERROR_INFO(error_var, error_val) \
do { if (error_var) *error_var = error_val; } while (0)
1. 形成一条语句,可以用在if等语句后面
#define FOO() \
do_sth1(); \
do_sth2()
if (true)
FOO();
如果这样定义宏,放在if语句后,只会只有do_sth1属于if block,do_sth2在if block外,总会被执行,显然不符合预期。
那么问题来了,为什么不能定义成下面这样?非定义成do while(0)。一定是有原因的,看下一小节哈。
#define FOO() { \
do_sth1(); \
do_sth2(); \
}
2. why not定义成{}形式,非要用do while(0)
if (true)
Foo();
else
do_sth();
如果宏定义成{},上面的语句会编译报错,定义成do while(0)就不会。Why?
定义成{}时,else是找不到与之匹配的if的,因为if后面跟了两个语句{};。定义成do while(0)时就没有问题。

浙公网安备 33010602011771号