宏——#define與#undef

來源:互聯網
上載者:User

 

宏定義是在程式編譯前的預先處理階段,對所有使用到宏的地方進行替換;

今天看到代碼裡面一大推的 #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 進行定義。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.