gpt4 book ai didi

c - Linux INIT_LIST_HEAD 首先,

转载 作者:行者123 更新时间:2023-11-30 15:29:31 26 4
gpt4 key购买 nike

我找到了很多对 INIT_LIST_HEAD 的引用,但在 INIT_LIST_HEAD_FIRST 上找不到任何内容。两者有什么区别。

INIT_LIST_HEAD(&orig_event->list);
INIT_LIST_HEAD_FIRST(orig_event->event_list);
INIT_LIST_HEAD_FIRST(orig_event->rt_hist_list);

一个传入指针所指向的内容的地址,另一个传入指针所指向的内容。

INIT_HLIST_HEAD(&bat_priv->gw.list);
INIT_LIST_HEAD(&bat_priv->tt.changes_list);

INIT_LIST_HEADINIT_HLIST_HEAD 之间有什么区别?

最佳答案

以下是来自 list-batman.h 的每个宏的定义:

00062 #define INIT_LIST_HEAD(ptr) do { \
00063 (ptr)->next = (ptr); \
00064 } while (0)
00065
00066 #define INIT_LIST_HEAD_FIRST(ptr) \
00067 ptr.next = (struct list_head *)&ptr; ptr.prev = (struct list_head *)&ptr; \
00068

(第 68 行是空白,因此第 67 行的延续不会执行任何操作。)

那么,这是什么意思呢?这个问题解释了特殊的 do { 。 。 。 } while (0) 构造: Why use apparently meaningless do-while and if-else statements in macros?因此,INIT_LIST_HEAD(ptr) 意味着前进到下一个列表元素。

INIT_LIST_HEAD_FIRST(ptr) 设置 list_head 结构的下一个和上一个指针,该结构是双向链表的空状态。

我对宏的名称感到困惑,因为两者听起来都像初始化,但这是编写代码的开发人员的问题。

更多:

我最初忽略了有关INIT_HLIST_HEAD的问题。我查了一下,linux/list.h将其定义为:

 #define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)

它处理hlist_node结构,其中包含一个next指针和一个指向指针的pprev指针。该宏初始化列表。

关于c - Linux INIT_LIST_HEAD 首先,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com