Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165812
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 317
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-04 12:49
个人简介

专注于服务器开发技术

文章分类

全部博文(34)

文章存档

2015年(5)

2014年(29)

我的朋友

分类: C/C++

2014-08-12 13:11:13

代码:

点击(此处)折叠或打开

  1. #define LIST_HEAD_INIT(name) { &(name), &(name) }

  2. #define LIST_HEAD(name) \
  3.     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
阅读(1331) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~