LIST_HEAD宏是否重新初始化所有变量?

Does LIST_HEAD macro re-initialize all variables?

我正在使用 LINUX 内置链表编写一些内核代码。我想知道对 INIT_LIST_HEAD 的多次调用是否会重新初始化我创建的所有变量。 INIT_LIST_HEAD 宏的行为是什么?

下面是一些示例代码:

INIT_LIST_HEAD(same_list);
for(i = 0; i < 10; i++)
     INIT_LIST_HEAD(same_list);
     add_to_tail_of_same_list

这两个列表是否指向同一个列表,即最后一次迭代中的same_list是否有10个元素?我在问这个问题,因为我想在 for 循环内使用 INIT_LIST_HEAD 而不是在循环外初始化。

INIT_LIST_HEAD does the following:

static inline void INIT_LIST_HEAD(struct list_head *list)
{
        list->next = list;
        list->prev = list;
}

因此,如果您从循环内部调用它,您将有效地重新初始化它 10 次,并且您添加的前 9 个元素将会丢失。