69,369
社区成员
发帖
与我相关
我的任务
分享
/* Keil 8051 */
#define offsetof(s,m) (size_t)&(((s *)0)->m)
/* Microsoft x86 */
#define offsetof(s,m) (size_t)(unsigned long)&(((s *)0)->m)
/* Motorola coldfire */
#define offsetof(s,memb) ((size_t)((char *)&((s *)0)->memb-(char *)0))
/* GNU GCC 4.0.2 */
#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
#define offsetof(s, m) ((size_t)((char *)&((s *)0)->m - (char *)(s *)0))
//对类型转换后的空指针的减法是为了确保即使空指针的内部表示不是0的时候也能正确计算出偏移
//转换成(char *)指针可以确保计算出的偏移是字节偏移