我在旧的内核代码中发现了这个:
#define hlist_for_each_entry(tpos, pos, head, member) \
for (pos = (head)->first; \
pos && \
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
pos = pos->next)
但我不明白我应该如何解释这一行的含义:
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;});
编译器如何理解大括号/圆括号内多个表达式的含义(
({...;...;})
构造)? 最佳答案
看来这个建筑
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;});
基于它自己的编译器语言扩展,并允许在表达式中使用复合语句。它类似于 C++ 中的 lambda 表达式。
我认为 build 的评估结果具有值(value)1。
在我看来,这只是一个糟糕的代码,因为可以使用逗号运算符来编写相同的代码,例如
pos && ( ( tpos = hlist_entry(pos, typeof(*tpos), member) ), 1 ); \
pos = pos->next)
关于c - 这个内核代码是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31963198/