宏——#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 進行定義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM