【发布时间】:2019-01-11 04:18:06
【问题描述】:
我目前正在研究 C 语言中宏的使用。 为了习惯它们并学习,我正在查看允许在 C 中创建动态数据结构的 queue.h 库。
您可以在这里找到来源: bxr.su/OpenBSD/sys/sys/queue.h
现在我偶然发现了以下定义:
#define SLIST_ENTRY(type) \
struct { \
struct type *slh_next;
}
如果我没记错的话,这会创建一个带有指针的结构,该指针将指向单链表中的下一个元素。 我只是想不通,为什么你必须创建结构。难道只有指针就够了吗?
#define SLIST_ENTRY(type) \
struct type *slh_next
我想如果你想创建一个双向链表,你会创建一个带有 next & before 指针的结构。那么这只是为了保持一致,还是 SLIST 定义中的结构用于特定目的?
PS:如何在手机上格式化代码和链接?
【问题讨论】:
-
如果你能用简单的方式写,你为什么要写这么模糊的代码?
-
头文件不是一个库,它可能描述一个库的接口。在您的情况下,BSD 通常在
sys树中具有 内核 源,因此它很可能不是您正在查看的库接口。 -
对于实际用例,这样做是为了以通用方式处理链接,但现在,我也没有看到包装匿名结构的必要性。