#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
如果对于上面LIST_HEAD_INIT能理解的话,再加上LIST_HEAD用于直接声明和初始化一个静态链表,则LIST_HEAD就能很容易理解。
就如:
static LIST_HEAD(fox);
/*相当于 static list_head name = LIST_HEAD_INIT(fox);*/
/*相当于 static list_head name = {&fox, &fox};*/
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
如上所述,INIT_LIST_HEAD常用于运行时初始化链表。从简单的宏中能看到ptr需要是个指针,并且是指向经过初始化的链表元素。初始化也做了简单的工作,令next和prev指向自身。
