linux的stddef.h定義offsetof()
爲:爲什麼要減去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
?有沒有什麼情況下,這實際上會有所作爲?
不應該使用/研究可能調用未定義行爲的代碼,如上所述。一個實現可以使用這種不正當的黑客,因爲他們知道什麼樣的未定義的行爲祕密工作。但是「祕密行事」是完全不可移植的。 – CTMacUser 2013-10-15 06:21:13