Я нашел заголовок для определения хэш-таблицу с помощью следующего кода:Полный макрос в файле заголовка
#ifndef HASH_H
#define HASH_H
#define DEFINE_HASHTABLE(name, type, key, h_list, hashfunc)\
\
struct list * hashtable;\
\
static int hashtable_init (size_t size)\
{\
unsigned long i;\
hashtable = (struct list*)malloc(size * sizeof (struct list_head));\
if (!hashtable)\
return -1;\
for (i = 0; i < size; i++)\
INIT_LIST_HEAD(&hashtable[i]);\
return 0;\
}\
\
static inline void hashtable_add(type *elem)\
{\
struct list_head *head = hashtable + hashfunc(elem->key);\
list_add(&elem->h_list, head);\
}\
\
static inline void hashtable_del(type *elem)\
{\
list_del(&elem->h_list);\
}\
\
static inline type * hashtable_find(unsigned long key)\
{\
type *elem;\
struct list_head *head = hashtable + hashfunc(key);\
\
list_for_each_entry(elem, head, h_list){\
if (elem->key == key) \
return elem; \
}\
return NULL;\
}
#endif /* _HASH_H */
Я никогда не видел такой файл заголовка это одно. В чем преимущество этого способа написать заголовок (я имею в виду полный макрос)? Это о простоте или подобном?
Что вы не понимаете? Функции, которые генерирует этот макрос при его расширении? Кстати, это довольно плохой дизайн, имеющий глобальную переменную с фиксированным именем. Вероятно, этот код еще не закончен, вы поймали его посередине. –