我期待在两个链表实现(queue.h [source]和utlist.h [source]),和我有一个关于他们各自实现了几个问题:一些链表C代码宏问题
- 什么是
_Q_INVALIDATE
所有关于queue.h?我想这是一些调试的一部分,但我不太了解宏define
逻辑。 - 两种实现都提供
FOREACH
和FOREACH_SAFE
。前者是直截了当的,但第二个逻辑背后的逻辑是什么?另外,如果前者不安全,为什么它首先被执行? - 为什么
queue.h
的next
和prev
(struct *le_next
和struct **le_prev
)的结构具有不同的类型? - 在这两种实现中,为什么在这里和那里插入了额外的括号?例如。在
#define LIST_FIRST(head) ((head)->lh_first)
对于#4请参见:[在参数名称周围的宏中使用括号](https://www.securecoding.cert.org/confluence/display/seccode/PRE01-C.+Use+parentheses+within+macros+around +参数+姓名) –
@MichaelBurr:啊,我现在明白了。谢谢。 – c00kiemonster