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

前端之家收集整理的这篇文章主要介绍了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[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&C++相关文章