#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = SLIST_FIRST((head)); \
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
(var) = (tvar))
上面这句(var)&&((tvar)= SLIST_NEXT((var),field),1)是很少见的,写代码测试了一下
发现C语言中(a,b)作为变量时,实际上取的值是b,a是不会参与运算的。例如上面这几行代码
实际上是
#define SLIST_FOREACH(var, head, field) \
for ((var) = SLIST_FIRST((head)); \
(var&&1); \
(var) = SLIST_NEXT((var), field))
for ((var) = SLIST_FIRST((head)); \
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
(var) = (tvar))
上面这句(var)&&((tvar)= SLIST_NEXT((var),field),1)是很少见的,写代码测试了一下
发现C语言中(a,b)作为变量时,实际上取的值是b,a是不会参与运算的。例如上面这几行代码
实际上是
#define SLIST_FOREACH(var, head, field) \
for ((var) = SLIST_FIRST((head)); \
(var&&1); \
(var) = SLIST_NEXT((var), field))