当前位置:编程学习 > 网站相关 >>

kernel:list LIST_HEAD/LIST_HEAD_INIT/INIT_LIST_HEAD

#define LIST_HEAD_INIT(name) { &(name), &(name) }
 
 
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
 
 
static inline void INIT_LIST_HEAD(struct list_head *list)
{
list->next = list;
list->prev = list;
}
 
 
When it is expended, 
 
LIST_HEAD(name)  comes to be
 
struct list_head name = {&(name), &(name)}
 
and since 
 
struct list_head {
 
struct list_head *next, *prev;
 
}
 
combine these two, we can symetrically get the means
 
(the same as we manually declare a global variable named *name*,
 
and call INIT_LIST_HEAD)
 
{
 
struct list_head name;
 
name.prev = &name;
 
name.next = &name;
 
}
 
 
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,