在使用queue.h e.h宏进行安全遍历时,我有一个疑问
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = TAILQ_FIRST((head)); \
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
(var) = (tvar))为什么在((tvar) = TAILQ_NEXT((var), field), 1)语句中添加尾随1?
发布于 2020-07-17 21:49:56
((tvar) = TAILQ_NEXT((var), field), 1);这使用comma operator。计算逗号左侧的表达式并丢弃其结果,然后计算右侧的表达式并返回其结果-本例中为文字1,因此如果var为true,则无论将tvar设置为什么值,整个(var) && ((tvar) = TAILQ_NEXT((var), field), 1)表达式都为true,因此for循环继续。当var不为真(通过作为NULL指针)时,它会停止。
https://stackoverflow.com/questions/62954730
复制相似问题