代码:
-
#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-
#define LIST_HEAD(name) \
-
list_t name = LIST_HEAD_INIT(name)
程序中用LIST_HEAD初始化链表:
LIST_HEAD(head);
宏替换LIST_HEAD(head):
list_t head = LIST_HEAD_INIT(head);
继续替换
LIST_HEAD_INIT:
list_t head = {&head,&head};
等价于
struct list_head head =
{&head,&head};
等价于
struct list_head head;
head->next = &head;
head->prev = &head;
至此,将head的next和prev都指向了自己,完成初始化。
总结:
LIST_HEAD和INIT_LIST_HEAD都可初始化链表,不同的是LIST_HEAD是由操作系统完成,INIT_LIST_HEAD是用户完成初始化。它们初始化的方式也不一样,不过却有异曲同工之妙。
参考:http://blog.chinaunix.net/uid-29587692-id-4391367.html
阅读(1323) | 评论(0) | 转发(0) |