1、定义一个包含多个语句的宏函数
观察下列函数
#define MYDELETE (p) free(p); p = 0;
如果把这个宏函数放在if 后,会出现编译错误
if (p != 0)
MYDELETE(p) ;
else
;
如果把宏定义为
#define MYDELETE (p) {free(p); p = 0;}
则,程序员习惯在语句后加上; 所以也会出现调用错误
if (p!=0)
MYDELETE(p);
else
;
可以通过把多条语句放在 do () while(0)中,为了方便,定义一个MYDO宏
#define MYDO(some) do {some} while (0)
则MYDELETE 可以写成
#define MYDELETE(p) MYDO(free(p);p=0;)
2、通过宏定义,开关调试信息
#ifdef DUBUG
#define MYPRINT(S) MYDO( write_to_log(s);write_to_screen(s);)
#else
#define MYPRINT(S) MYDO
#endif
这样,如果是debug版本,则打印信息到文件,否则,什么也不做。