C语言宏定义的学习------一个宏代表一段代码
来源:互联网 发布:win7无法启动网络发现 编辑:程序博客网 时间:2024/06/05 19:03
开拓视野,以方便对代码的学习、研读和编写。
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
- C语言宏定义的学习------一个宏代表一段代码
- 一段宏定义的代码
- 一个小小的C语言宏定义错误 - [C,C++]
- C语言宏定义的学习
- 一段C语言写的病毒代码
- 由一段代码来深入理解C语言宏
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个技巧用法
- C语言中宏定义的一个变态用法
- C语言中宏定义的一个变态用法
- 一个C语言宏定义错误
- c 语言的宏定义
- C语言的宏定义
- C语言的宏定义
- C语言的宏定义
- 求助:win7下能用boundschecker吗?
- 输出二维宽字节数组
- android 动画
- Discuz源码分析--数据库各数据表解析&各字段的用途
- 用C语言编程16点阵字库
- C语言宏定义的学习------一个宏代表一段代码
- BMP位图格式详解
- code
- 使用DiskFileItemFactory在Action中获得JSP表单内容(用在有图片上传功能的表单中)
- 免费的天气预报webservice接口
- 四极管:轻松一刻中的天朝套现模式
- android 图片按照动画不停移动
- Android应用开发商业模式学习
- Monkey test