宏——#define与#undef

 

宏定义是在程序编译前的预处理阶段,对所有使用到宏的地方进行替换;

今天看到代码里面一大推的 #define与#undef的使用,却不甚明白看了好一阵子才弄清楚是干什么的,其实很简单。

定义:

 

#define PROCESS_TYPE_DEF_SAME_DELETE()        PROCESS_TYPE_BASIC_DEF(UMS_PROCESS_TYPE_SAME_DELETE, same_delete)

#define PROCESS_TYPE_DEF_GET_SAME_LIST() PROCESS_TYPE_BASIC_DEF(UMS_PROCESS_TYPE_GET_SAME_LIST, get_same_list)



同一类型的处理动作(很多简单列举)

 

#define ALL_PROCESS_TYPE_DEF \

PROCESS_TYPE_DEF_SAME_DELETE() \

PROCESS_TYPE_DEF_GET_SAME_LIST() \

  ……



 

#define REQ_HANDLER(tag)    srv_um_##tag##_req

#define RSP_HANDLER(tag) srv_um_##tag##_rsp



使用:

#undef PROCESS_TYPE_BASIC_DEF

#define PROCESS_TYPE_BASIC_DEF(type, tag) \

S32 REQ_HANDLER(tag)(ums_process_struct *process); \

S32 RSP_HANDLER(tag)(ums_process_struct *process, RSP_STRUCT(tag) *inMsg);


ALL_PROCESS_TYPE_DEF

 

接着:

 

#undef PROCESS_TYPE_BASIC_DEF

#define PROCESS_TYPE_BASIC_DEF(type, tag) \

{sizeof(PARA_STRUCT(tag)), \

sizeof(CNTX_STRUCT(tag)), \

sizeof(RESULT_STRUCT(tag)), \

REQ_HANDLER(tag), \

(S32 (*)(ums_process_struct* , void*))RSP_HANDLER(tag)},



static const ums_process_type_table_struct ums_process_type_tbl[UMS_PROCESS_TYPE_MAX] =

{

ALL_PROCESS_TYPE_DEF //初始化一个数组

};



紧接着:

#undef PROCESS_TYPE_BASIC_DEF

#define PROCESS_TYPE_BASIC_DEF(type, tag) \

MMI_BOOL srv_um_recv_##tag##_rsp(void *inMsg) \

{ \

RSP_STRUCT(tag) *rsp = inMsg; \

if (rsp->app_id != 0) \

{ \

return MMI_FALSE; \

} \

srv_um_response_handler(type, inMsg); \

return MMI_TRUE; \

}



ALL_PROCESS_TYPE_DEF //定义一系列相似的函数

 

从上面可以看出:

#undef就是取消一个宏的定义,之后这个宏所定义的就无效;

但是可以重新使用#define 进行定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值