结构体成员Offset

有一种空指针(NULL)的特殊用法,将其强制转换为某种结构体类型,然后获取该结构体某成员的地址偏移量(offset):

#define OFFSET(type, field) \
        ((size_t)&((type *)0)->field)

虽然该代码经常可以工作,但C标准并没有明确定义该行为。

其实,C标准头文件stddef.h已经定义了一个相同功能的宏offsetof,可以直接使用,而不必自己实现。