如果能够让(unsigned long)(&(type))的值为0,即&(type) == 0的时候,那么offset的值就是简单的:

offset = (unsigned long)(&(type.c));

如果说&(type) == 0,那么type.c就可以等价于((Type_t *)0)->c

但是这个语句是不能单独存在的,因为对NULL指针访问成员c是非法的。

可以通过在该语句之前加上&符号,即获取成员c的地址就没问题了。因此,对应的宏如下:

#define OFFSET(TYPE, MEMBER) ((unsigned long)(&(((TYPE *)0)->MEMBER)))

 

参考:

https://blog.csdn.net/encourage2011/article/details/52463857

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-20
  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
  • 2021-11-15
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-19
  • 2021-07-27
  • 2021-08-27
  • 2021-08-14
相关资源
相似解决方案