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)