举例:
不用do{...}while(0)
#define DOSOMETHING() fuc1(); fuc2()
if(num > 0)
DOSOMETHING();
结果变成了:
if(num > 0)
fuc1();
fuc2();
调用错误。
使用do{...}while(0)
#define DOSOMETHING() do{ fuc1(); fuc2(); }while(0)
if(num > 0)
DOSOMETHING();
结果变成了:
if(num > 0)
do{ fuc1(); fuc2(); }while(0);
结果正确。
有人说加大括号可以解决,如下所示:
#define DOSOMETHING() {fuc1(); fuc2();}
这也是错误的。
举例:
DOSOMETHING();
结果变成了:
{fuc1(); fuc2();};