zoukankan      html  css  js  c++  java
  • 宏——#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 进行定义。

  • 相关阅读:
    《大型网站技术架构》学习笔记-03案例篇
    SpringBoot详细研究-05微服务与拾遗
    04证券市场典型违法违规行为及法律责任
    《大型网站技术架构》学习笔记-02架构篇
    DES & 3DES 加密算法
    技术的阐述能力
    python des ecb 加密 demo
    linux c 笔记-4 工程项目阅读推荐
    linux c 笔记-3 c语言基础知识
    linux c 笔记-2 Hello World & main函数
  • 原文地址:https://www.cnblogs.com/bastard/p/2382499.html
Copyright © 2011-2022 走看看