最近在接触内核方面的东西,遇见如下一段代码:
struct list_head { struct list_head *next, *prev; //双向链表 }; #define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name) #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0)
在网上看了很多前人工作,在这里自己做下总结。
来看数据结构体:
struct list_head { struct list_head *next, *prev; };
//宏定义如下:
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) struct list_