list_head 入侵式的双链表。
初始化
LIST_HEAD(list);
源代码
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
遍历
struct Node {
int value;
char *name;
list_head list;
};
Node lists[3] = {[0] = {.value = 0, .name = "apple"},
[1] = {.value = 1, .name = "lionel"},
[2] = {.value = 2, .name = "xiaomi"}};
LIST_HEAD(list);
list_add_tail(&lists[0].list, &list);
list_add_tail(&lists[1].list, &list);
list_add_tail(&lists[2].list, &list);
list_head *mod = nullptr;
list_for_each(mod, &list) {
Node *inode;
//节点指针 类型 节点listhead 名字
inode = list_entry(mod, Node, list);
printf("%d %s\n", inode->value, inode->name);
}