MTK平台源码学习笔记之-------宏定义的学习

开拓视野,以方便对代码的学习、研读和编写。

1\

#ifdef __MMI_BOOTUP_SCALE__
#define MMI_APP_INIT(func) {U32 start_time, end_time;\
                            S8 func_name[] = #func;\
                            kal_get_time(&start_time);\
                            func;\
                            kal_get_time(&end_time);\
   Trace2(TRACE_FUNC, "[BOOTUP SCALE]Function: %s Time: %d", func_name, (end_time-start_time));\
                           }
#else
#define MMI_APP_INIT(func)  func
#endif

例子1,表示了此宏代表了  对一个方法的调用,  若没有定义此宏直接就是对方法的调用。



2\
#define SetProtocolEventHandler(func, event)   \
        mmi_frm_set_protocol_event_handler(event, (PsIntFuncPtr)func, MMI_FALSE)
        

例子2,表示了一个方法的宏,实际是对另外一个方法的调用;

 

个人认为是可以等价为

SetProtocolEventHandler(func, event) 

{

mmi_frm_set_protocol_event_handler(event, (PsIntFuncPtr)func, MMI_FALSE)

}

代码实现的功能应该可以等价,但是在编译器处理和方法运行时不同:

(1)宏定义是在预编译的时候,就换成了对调用方法的替换;

(2)方法的表示,是在函数运行中,会有对方法调用时,堆栈与寻找函数地址等一系列的操作;

        


3\
#define  RESOURCE_BASE_ENUM_BEGIN()      \
    typedef enum                        \
    {                                   \
        RESOURCE_BASE_FIRST_VALUE = 0,  \
        RESOURCE_BASE_RANGE(APP_WAP, 1500),



#define RESOURCE_BASE_RANGE(ap_id, count)    \
    ap_id,                                   \
    GET_RESOURCE_BASE(ap_id) = ap_id,        \
    GET_RESOURCE_MAX(ap_id) = ap_id + count - 1                         // 注意此行没有逗号,而实际中的枚举,是利用外边的逗号;



#define  RESOURCE_BASE_ENUM_END()                    \
        RESOURCE_BASE_RANGE(APP_DEVAPP,    300),    \
        RESOURCE_BASE_RANGE(APP_DEFAULT_END, 1),    \
        RESOURCE_BASE_RANGE(END, 1)                 \
    } RESOURCE_BASE_ENUM;

    


应用如下:
RESOURCE_BASE_ENUM_BEGIN()


#if defined(__MMI_MIIPTS__)

        RESOURCE_BASE_RANGE(MIIPTS, 1000),
#endif // defined(__MMI_MIIPTS__)

    RESOURCE_BASE_RANGE(SRV_STATUS_ICONS,               300),
    RESOURCE_BASE_RANGE(SRV_INFO_NUM,                   100),
    RESOURCE_BASE_RANGE(SRV_CONNECTS,                   100),


    /**************************************************************************************
     * Declare resource ID range above 
     **************************************************************************************/
RESOURCE_BASE_ENUM_END()

例子3,是通过把“枚举定义的开始” 和 “枚举定义的结束”的代码,分别写在两个宏里面。 


4\
/*
 * Use these tow macro to get the resource base and resource end
 */
#define GET_RESOURCE_BASE(id)   RESOURCE_BASE_##id
#define GET_RESOURCE_MAX(id)    RESOURCE_BASE_##id##_END
例子4,通过方法名字的形式,来实现对宏变量的替换。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值