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
なぜウィキペディアバージョンで減算するのですか?それが実際に違いを生むケースはありますか?