了解SLIST - queue.h

时间:2011-03-02 13:35:13

标签: c linux queue

我一直在研究如何使用sys / queue.h中定义的宏来使用单链表,我有一些疑问。目前我正在尝试使用相同的方法创建一个简单的列表。请注意,下面的程序不完整,我只提供了我觉得相关的部分。

int main() {
    SLIST_HEAD(slisthead, entry) head = SLIST_HEAD_INITIALIZER(head);
    struct slisthead *headp;

    struct entry {
        SLIST_ENTRY(entry) entries;
    }*n1, *n2, *n3, *np;


    /* Upon expanding the macro we would get,
     * struct entry {
     *      struct {
     *          struct entry *sle_first;
     *      } entries;
     *  }*n1, *n2, *np;
     */

我无法理解为什么“sle_first”完全存储在另一个结构中。无法将SLIST_ENTRY扩展为类似以下的内容吗?

#define SLIST_ENTRY(type) struct type* sle_first;

2 个答案:

答案 0 :(得分:2)

sys / queue.h还包含双链表和队列,在条目中需要多个指针。

所以我认为SLIST_ENTRY以这种方式扩展为类似于其他类型的条目,如队列。

答案 1 :(得分:0)

这已经晚了将近5年,但是如果有人读了这个恕我直言,这是因为侵入式列表的节点可以同时属于许多不同的列表(与侵入式节点挂钩成员一样多),所以每个成员您的"条目" struct需要有不同的名称。