Chinaunix首页 | 论坛 | 博客
  • 博客访问: 891128
  • 博文数量: 139
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-31 02:15
文章存档

2008年(19)

2007年(73)

2006年(46)

2005年(1)

我的朋友

分类: LINUX

2007-02-01 20:35:52

 1.两个数比较大小
#define min( x,y) ({ \
typeof( x) _x = ( x); \
typeof( y) _y = ( y); \
(void) (&_x == &_y); \ //妙用!作用是检查参数 x 和 y 的类型是否相同
_x < _y ? _x : _y; })

2.链表的使用
这个不多说了,太棒了,可以由一个链表成员获取宿主的指针

3.do{}while(0)的使用
#define func(x) do{...;}while(0)

4.结构体中的#define
struct sock {
struct sock_common __sk_common;
#define sk_family __sk_common.skc_family
#define sk_state __sk_common.skc_state
.....
};

5.使用C写出的面向对象程序,通过给结构体中的成员赋予不同的函数指针而实现不同的功能,取代了大量的case语句

6.通过条件宏定义,同一函数名有不同的实现,方便调用此函数
#ifdef xxx
#define func(x) do{实现;}while(0)
#else
#define func(x) do{}while(0)

7.零长度数组
GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例
如:
struct minix_dir_entry {
__u16 inode;
char name[0];
};

8.可变参数宏
在 GNU C 中,宏可以接受可变数目的参数,就象函数一样,例如:
#define pr_debug(fmt,arg...) \
printk(KERN_DEBUG fmt,##arg)
阅读(871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~