#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] 创建了一个某种类型的数组,但是这个类型却没有名称。