C 列表头宏是否重新初始化所有变量?

C 列表头宏是否重新初始化所有变量?,c,linux-kernel,kernel,C,Linux Kernel,Kernel,我正在使用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 INIT_LIST_HEAD(相同的_LIST); 对于(i=0;i

我正在使用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
INIT_LIST_HEAD(相同的_LIST);
对于(i=0;i<10;i++)
初始列表头(相同列表);
将添加到同一列表的\u tail\u

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

INIT_LIST_HEAD

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

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