Понимание SLIST - queue.h - PullRequest
2 голосов
/ 02 марта 2011

Я смотрел на то, как я мог бы использовать одиночные связанные списки, используя макросы, определенные в 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 ]

2 голосов
/ 02 марта 2011

sys / queue.h также содержит двойные связанные списки и очереди, для которых требуется более одного указателя в записи.

Так что я думаю, что SLIST_ENTRY расширил этот способ, чтобы быть похожим на записи другого типа, например очереди.

0 голосов
/ 01 февраля 2016

Это почти на 5 лет позже, но в случае, если кто-то читает это ИМХО, это происходит потому, что узел навязчивого списка можно сделать принадлежащим ко многим различным спискам одновременно (столько же, сколько имеют навязчивые члены ловушек узлов), поэтому каждый членвашей структуры "entry" должно быть присвоено другое имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...