下面的代码中
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 的值来判断是否继续执行。
现在不太清楚这一行的语法,为什么可以这么写,求解释。
之前也没见到过这样的特殊用法,刚才搜了一下,找到了有关的描述。
({exp1; exp2; exp3;})
这样的用法是复合语句的表达式用法,其值等于exp3的值。如果exp3不能求值,得到的结果就是void。
( {int a = 2+1; int b = 0; b;} ) // 0
( {int a = 2+1; int b = 0; int c = 0;} ) // void
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。