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

时间:2015-02-14 17:11:17

标签: 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

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

1 个答案:

答案 0 :(得分:2)

INIT_LIST_HEAD does the following

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

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