我一直在研究如何使用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) struct type* sle_first;
答案 0 :(得分:2)
sys / queue.h还包含双链表和队列,在条目中需要多个指针。
所以我认为SLIST_ENTRY以这种方式扩展为类似于其他类型的条目,如队列。
答案 1 :(得分:0)
这已经晚了将近5年,但是如果有人读了这个恕我直言,这是因为侵入式列表的节点可以同时属于许多不同的列表(与侵入式节点挂钩成员一样多),所以每个成员您的"条目" struct需要有不同的名称。