Linux 的stddef.h定义offsetof()
为:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
而关于offsetof()
(http://en.wikipedia.org/wiki/Offsetof)的维基百科文章将其定义为:
#define offsetof(st, m) \
((size_t) ( (char *)&((st *)(0))->m - (char *)0 ))
(char *)0
为什么要在维基百科版本中减去?在任何情况下,这实际上会有所作为吗?