下面的代码中
for (pos = hlist_bl_first_rcu(head);
pos &&
({ tpos = hlist_bl_entry(pos, typeof(*tpos), member); 1; });
pos = rcu_dereference_raw(pos->next))
{
...
}
第3行 ({ tpos = hlist\_bl\_entry(pos, typeof(\*tpos), member); 1; })
的意思是执行函数 hlist\_bl\_entry()
后再将这个括号的值设置为 1
,就是这个 for
循环只通过 pos
的值来判断是否继续执行。
现在不太清楚这一行的语法,为什么可以这么写,求解释。
之前也没见到过这样的特殊用法,刚才搜了一下,找到了有关的描述。
这样的用法是复合语句的表达式用法,其值等于
exp3
的值。如果exp3
不能求值,得到的结果就是void
。我相信GNU C当中有更多标准化的描述,你也可以自己寻找。