我正在查看两个链表实现(queue.h [ source ] 和utlist.h [ source ]),我对它们各自的实现有一些疑问:
_Q_INVALIDATE
queue.h中的全部内容是什么?我想这是一些调试的一部分,但我不太了解宏观define
逻辑。- 两种实现都提供
FOREACH
和FOREACH_SAFE
. 前者是直截了当的,但第二个背后的逻辑是什么?另外,如果前者无论如何都不安全,那为什么要首先实施呢? - 为什么将
queue.h
其结构实现为具有不同类型的next
andprev
(struct *le_next
andstruct **le_prev
)? - 在这两种实现中,为什么要在这里和那里插入额外的括号?例如。
head
在附近#define LIST_FIRST(head) ((head)->lh_first)