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

  • 相关阅读:
    Springboot中使用Interceptor(拦截器)
    八大排序之冒泡排序
    八大排序之快速排序
    mysql 用户的增删改与授权
    基于Java8开发接口时,处理Java8中的日期
    Springboot中Filter的使用
    正则校验日期,不考虑闰年和闰月
    正则校验时间,24小时制
    记一下mybatis中foreach循环遇到的一个小问题
    sqlserver中一条语句执行查询与更新
  • 原文地址:https://www.cnblogs.com/bastard/p/2382499.html
Copyright © 2011-2022 走看看