c语⾔宏定义与switch,C语⾔宏定义⼩结现有⼀个例⼦:
#define PJ_LOG(level,arg) \
dosomething();\
switch的用法c语言if (level <= pj_log_get_level()) \
pj_log_wrapper_##level(arg);
现在假设有以下应⽤:
if(L==1)
PJ_LOG(L,"AAA");
宏转开为:
if(L==1)
dosomething();
if (1 <= pj_log_get_level())
pj_log_wrapper_1("AAA"); ;
显然if(L==1)只管到dosomething();⽽后⾯的
if (1 <= pj_log_get_level())
pj_log_wrapper_1("AAA"); ;
则成了独⽴的语句。
假如使⽤do{}while(0)语句块,进⾏宏定义:
#define PJ_LOG(level,arg)do{ \
dosomething();\
if (level <= pj_log_get_level()) \
pj_log_wrapper_##level(arg); \
}while(0)
上述应⽤转开后为:
if(L==1)
do{
dosomething();
if (1<= pj_log_get_level())
pj_log_wrapper_1("AAA");
}while(0);
这样避免了意外的⿇烦。OK现在明⽩了很多C程序中奇怪的do{}while(0)宏定义了吧

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。