1.兩個(gè)數(shù)比較大小
#define min( x,y) ({
typeof( x) _x = ( x);
typeof( y) _y = ( y);
(void) (&_x == &_y); //妙用!作用是檢查參數(shù) x 和 y 的類型是否相同
_x < _y ? _x : _y; })
2.鏈表的使用
這個(gè)不多說了,太棒了,可以由一個(gè)鏈表成員獲取宿主的指針
3.do{}while(0)的使用
#define func(x) do{...;}while(0)
4.結(jié)構(gòu)體中的#define
struct sock {
struct sock_common __sk_common;
#define sk_family __sk_common.skc_family
#define sk_state __sk_common.skc_state
.....
};
5.使用C寫出的面向?qū)ο蟪绦颍ㄟ^給結(jié)構(gòu)體中的成員賦予不同的函數(shù)指針而實(shí)現(xiàn)不同的功能,取代了大量的case語句
6.通過條件宏定義,同一函數(shù)名有不同的實(shí)現(xiàn),方便調(diào)用此函數(shù)
#ifdef xxx
#define func(x) do{實(shí)現(xiàn);}while(0)
#else
#define func(x) do{}while(0)
7.零長度數(shù)組
GNU C 允許使用零長度數(shù)組,在定義變長對(duì)象的頭結(jié)構(gòu)時(shí),這個(gè)特性非常有用。例
如:
struct minix_dir_entry {
__u16 inode;
char name[0];
};
8.可變參數(shù)宏
在 GNU C 中,宏可以接受可變數(shù)目的參數(shù),就象函數(shù)一樣,例如:
#define pr_debug(fmt,arg...)
printk(KERN_DEBUG fmt,##arg)