+ -
当前位置:首页 → 问答吧 → 一个链表宏的问题

一个链表宏的问题

时间:2011-11-15

来源:互联网

#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
  for ((var) = TAILQ_FIRST((head)); \
  (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
  (var) = (tvar))

该for循环的第2个判断条件是什么意思?

作者: TestFamily   发布时间: 2011-11-15

当前结点、下一个结点都不为空

作者: justkk   发布时间: 2011-11-15

((tvar) = TAILQ_NEXT((var), field), 1); 
这里的参数1,是什么作用,感觉是多余的。

作者: TestFamily   发布时间: 2011-11-15

逗号运算符,这里的1表示后面值逻辑上总是true的
整个表达式是把var设置到链表的最后一个节点后的空节点

作者: thefirstz   发布时间: 2011-11-15

哦,明白了。
((tvar) = TAILQ_NEXT((var), field), 1)这个逗号表达式的值始终为1,而tvar 等于var的next.即使得到var为空,也要再下一次循环的时候,不满足条件而退出。

作者: TestFamily   发布时间: 2011-11-15

热门下载

更多