Ben*_*min 2 c macros kernel device-driver linux-kernel
我知道宏的作用.
在许多内核级代码中,它通常用于遍历链表.
我想找到其他有用的案例.
你什么时候使用container_of或CONTAINING_RECORD宏?
什么时候宏非常有用?
这是解决C没有泛型或模板的事实的一种方法。
您需要一个通用的链表,因此只需将指针放在节点本身内(这样您就可以抽象化结构本身的管理),然后用于CONTAINING_RECORD在您自己的代码中查找其余数据,例如:
struct Node { struct Node *prev, *next; }
//Now you can define functions that operate on a generic struct Node*
struct Item
{
int myData;
struct Node* node; //this would point to the 'node' member of another Item
}
Run Code Online (Sandbox Code Playgroud)
现在,给定一个struct Node,您可以Item通过以下方式找到它:
CONTAINING_RECORD(ptr, Item, node)
Run Code Online (Sandbox Code Playgroud)