Berkeley 在他们的 FreeBSD 中实现的queue.h确实非常有用,现在我有一个关于TAILQ_LAST宏的问题,请注意我提出的不同之处
原始代码
#define TAILQ_HEAD(name, type) \
struct name
{ \
struct type *tqh_first; /* first element */ \
struct type **tqh_last; /* addr of last next element */ \
}
#define TAILQ_ENTRY(type) \
struct
{ \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
}
#define TAILQ_LAST(head, headname) \
(*(((struct headname *)((head)->tqh_last))->tqh_last))
我的提议
#define TAILQ_LAST(head, headname) \
((head)->tqh_last))
我的观点是 headname 的tqh_last成员是指最后一个TAILQ_ENTRY的tqe_next成员的地址,这正是tailq中最后一个条目的地址。
如果我错了,请纠正我。提前致谢。