宏——#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 进行定义。

posted @ 2012-03-06 19:39  __Shadow  阅读(25675)  评论(0编辑  收藏  举报