container_of宏在不同编译器下的兼容性

   2024-09-30 7570
核心提示:container_of 宏是一个用于获取结构体实例指针的宏,通常用于 Linux 内核编程以下是一个简单的示例:#includestdio.h#include st

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 语言中的类型转换。但请注意,这种方法可能会导致未定义行为,因此在使用时要确保了解相关风险。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号