2013年9月24日

(转载)MACHINE_START MACHINE_END 宏

摘要: 一、定义[cpp] #define MACHINE_START(_type,_name) \ //板类型,板名字 static const struct machine_desc __mach_desc_##_type \ __used \ __attribute__((__section__(".arch.info.init"))) = { \ .nr = MACH_TYPE_##_type, \ .name = _name, #define MACHINE_END \ }; MACHINE_START和MACHINE_END... 阅读全文

posted @ 2013-09-24 19:29 熊猫酒仙是也 阅读(238) 评论(0) 推荐(0) 编辑

可变参数列表---以dbg()为例

摘要: 在UART驱动的drivers/serial/samsung.h中遇到如下定义:#ifdef CONFIG_SERIAL_SAMSUNG_DEBUGextern void printascii(const char *);static void dbg(const char *fmt, ...){ va_list va; char buff[256]; va_start(va, fmt); vsprintf(buff, fmt, va); va_end(va); printascii(buff);}#else#define dbg(x...) do { } ... 阅读全文

posted @ 2013-09-24 16:33 熊猫酒仙是也 阅读(425) 评论(0) 推荐(0) 编辑

(转载)do{...}while(0)的意义和用法

摘要: linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个宏:#define DOSOMETHING()\ foo1();\ foo2();这个宏的本意是,当调用DOSOMETHING()时,函数foo1()和foo2()都会被... 阅读全文

posted @ 2013-09-24 12:56 熊猫酒仙是也 阅读(185) 评论(0) 推荐(0) 编辑

导航