container_of
宏是一個用于獲取結構體實例指針的宏,通常用于 Linux 內核編程
以下是一個簡單的示例:
#include<stdio.h>
#include <stddef.h>
struct container {
int data;
struct inner {
int inner_data;
} inner_member;
};
#define container_of(ptr, type, member) \
((type *)((char *)(ptr) - offsetof(type, member)))
int main() {
struct container my_container = {.data = 10, .inner_member.inner_data = 20};
struct inner *inner_ptr = &my_container.inner_member;
// 使用 container_of 宏獲取 container 結構體實例的指針
struct container *container_ptr = container_of(inner_ptr, struct container, inner_member);
printf("Container data: %d\n", container_ptr->data);
printf("Inner data: %d\n", container_ptr->inner_member.inner_data);
return 0;
}
這個示例在大多數 C 語言編譯器上都應該能正常工作。然而,如果你發現在某些編譯器上遇到問題,可以嘗試使用其他方法來實現類似的功能,例如使用 C++ 中的 static_cast
或者 C 語言中的類型轉換。但請注意,這種方法可能會導致未定義行為,因此在使用時要確保了解相關風險。