gpt4 book ai didi

c - 库中 TAILQ 用法的最小示例

转载 作者:IT王子 更新时间:2023-10-29 00:23:38 33 4
gpt4 key购买 nike

有人可以提供 Linux 系统库中 TAILQ 用法的最小示例,并在 c 中进行解释,可以在 Linux 中使用 gcc 进行编译吗?

最佳答案

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_FOREACHTAILQ_FOREACH_REVERSE 遍历列表。

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

如果您想在删除所有元素的同时遍历列表,使用 while 循环并使用 TAILQ_EMPTYTAILQ_FIRST 宏可能更容易。

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

上面的代码大部分是从我在 IDEONE 上编写和测试的一个例子中逐字提取的。 .

关于c - <sys/queue.h> 库中 TAILQ 用法的最小示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315213/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com