#define fun() do {a***; b***;} while(0)
1. 在if语句之后,如果没有do {} while(0),就是#define fun() a***; b***;
那么只有a***; 与if结合,而b***; 就没啥用了
2. 如果没有do while(0),但是{}保留,就是#define fun() {a***; b***;}
那么在if语句之后,由于程序员通常的习惯
if ()
fun();
else
fun2();
将变成
if ()
{a***; b***;};
else
fun2();
那么会产生编译错误,因为if后面已经出现了2个语句,1个是{a***; b***;},1个是;