Linux中的C语言妙用node
做者:兄弟连数组
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)函数