C语言 将offsetof宏转换为函数:这可能吗?

xxls0lw8  于 2023-02-18  发布在  其他
关注(0)|答案(1)|浏览(117)

在一个项目中,我需要获得特定结构成员的偏移量。但是我不能使用任何宏。所以我尝试采用这背后的逻辑

#define OFFSETOF(struct_name, fld_name) \
    (unsigned int)&(((struct_name *)0)->fld_name)

把它转换成一个函数,得到这个。

unsigned long offset_of_1(void *ptr, void *field)
{
    return ((unsigned long)field - (unsigned long)ptr);
}

只要我使用一个已经初始化的结构,它就可以工作,这是我发现的唯一一个看起来可以工作的工作,但是我想知道是否有更好的方法来做到这一点?

wbrvyc0a

wbrvyc0a1#

有没有更好的办法
使用标准库offsetof()
或者
1.“我不能使用任何宏。”--〉与规则制定者联系,允许使用标准库宏。@StoryTeller - Unslander Monica@Steve Summit
1.发布看起来“需要获取特定结构成员的偏移量”的代码,也许有一种替代方法是可能的。

相关问题