您的用法示例container_of(dev, struct wifi_device, dev);可能会误导您,因为您在此处混合了两个名称空间。
虽然dev示例中的第一个引用指针的名称,但是第二个dev引用结构成员的名称。
这种混淆很可能激起所有这些头痛。实际上,member引用中的参数是指在容器结构中赋予该成员的名称。
以这个容器为例:
struct container {
int some_other_data;
int this_data;
}
还有一个指向您要使用该宏int *my_ptr的this_data成员的指针,该指针可以struct container *my_container通过以下方式获得:
struct container *my_container;
my_container = container_of(my_ptr, struct container, this_data);
考虑this_data到结构开头的偏移量对于获取正确的指针位置至关重要。
实际上,您只需this_data要从指针中减去成员的偏移量my_ptr即可获得正确的位置。
这正是宏的最后一行。