我在旧的内核代码中发现了这个:

#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/

10-13 05:30