c - 了解 SLIST -queue.h

标签 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) 结构类型* sle_first;

最佳答案

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

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

关于c - 了解 SLIST -queue.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168183/

相关文章:

php - 使用范围通过 curl 在多个文件上指定输出名称

c - 如何将C语言转换为MIPS汇编代码?

python - ord() 在 Linux 和 Mac 上捕获箭头键按下

linux - 如何使用 "X-TMASE-MatchedRID"删除 "egrep -v"键/值?

c++ - 如何创建一个队列,其中包含 boost::packaged_task<> 以及返回任意类型的函数?

Java 读取 .txt 文件并使用子字符串进行排序

c++ - 如何在程序中查找数据段和代码段范围

c++ - 赋值运算符左边的三元条件运算符

c - 使用 C 更新 MongoDB 中数组中的多个值

ruby-on-rails - 使用 ActiveJob AsyncAdapter 列出排队的任务