|
|
发表于 2005-9-1 15:49:19
|
显示全部楼层
Post by missanda
加入这个do{}while(0)是为了避免可能的某些编译器错误特别是宏里面定义了变量。
当编译器优化的时候就不会出错。
例如我们定义一个LOG()宏
#define LOG(level,fmt,args...) do{\
char buff[4096]; \
bzero(buff,sizeof(buff));\
snprintf(buff,sizeof(buff),fmt,##args);\
fprintf(stderr,"my log %s\n",buff);\
}while(0)
这种说法倒是第一次见到,宏定义体里面难道不能定义变量吗? |
|