#define HASH_HEAD(name, type, field, capacity)\
struct name {\
int count;\
int table_size;\
unsigned long (*key_hash)(typeof(&((struct type *)0)->field)); \
int (*key_comp)(typeof(&((struct type *)0)->field), \
typeof(&((struct type *)0)->field)); \
LIST_HEAD(,type) table[capacity];\
}
#define LIST_HEAD(name, type)\
struct name {\
struct type *lh_first;/* first element */\
}
&((struct type *)0)->field) 这样求得的成员field的品阿姨两
int a
typeof(a) 表示一个类型,这里是int。所以typeof(&((struct type *)0)->field)表示一个类型。
所以unsigned long (*key_hash) (typeof(&((struct type *)0)->field));表示一个函数指针。
LIST_HEAD(,type) table[capacity] 创建了一个某种类型的数组,但是这个类型却没有名称。