c – 图书馆TAILQ使用的最小例子

有些人可以从linux系统库中提供TAILQ使用的最小例证,在c中可以使用gcc在Linux中编译?
TAILQ_ENTRY宏用于建立用于将项目插入列表的指针.您将其放入您要列出的结构中.

struct foo {
    TAILQ_ENTRY(foo) tailq;
    int datum;
    /* ... */
};

TAILQ_HEAD用于定义一个可以充当链接列表元素的容器的结构.您提供一个结构名称,以及它将包含的类型的名称.

TAILQ_HEAD(fooq, foo);

使用TAILQ_INIT初始化列表容器的实例.

struct fooq q;
TAILQ_INIT(&q);

使用TAILQ_INSERT_ *宏添加元素.

struct foo data[3] = { foo(3), foo(7), foo(1) };
TAILQ_INSERT_HEAD(&q, &data[0], tailq);
TAILQ_INSERT_AFTER(&q, &data[0], &data[1], tailq);
TAILQ_INSERT_TAIL(&q, &data[2], tailq);

您可以使用TAILQ_FOREACH和TAILQ_FOREACH_REVERSE遍历列表.

struct foo *p;
TAILQ_FOREACH(p, &q, tailq) {
    printf(" %d", p->datum);
}
puts("");

如果要在删除所有元素的同时迭代列表,可能更容易使用while循环并使用TAILQ_EMPTY和TAILQ_FIRST宏.

while (!TAILQ_EMPTY(&q)) {
    p = TAILQ_FIRST(&q);
    TAILQ_REMOVE(&q, p, tailq);
    /* ... */
}

上面的代码主要是从IDEONE写的一个例子中逐字地进行了测试.

转载注明原文:c – 图书馆TAILQ使用的最小例子 - 代码日志