लिनक्स के stddef.h परिभाषित करता है offsetof()
के रूप में:क्यों offsetof में नल पॉइंटर घटाना()?
#define offsetof(st, m) \
((size_t) ((char *)&((st *)(0))->m - (char *)0))
क्यों विकिपीडिया संस्करण में (char *)0
घटाना:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
जबकि offsetof()
(http://en.wikipedia.org/wiki/Offsetof) पर विकिपीडिया लेख के रूप में परिभाषित? क्या कोई ऐसा मामला है जहां वास्तव में कोई फर्क पड़ता है?
आप उपयोग नहीं करना चाहिए/अध्ययन कोड कि अपरिभाषित व्यवहार आह्वान कर सकते हैं, इसके बाद के संस्करण की तरह। एक कार्यान्वयन ऐसे skanky हैक्स उपयोग करें, क्योंकि वे जानते हैं कि अपरिभाषित व्यवहार के प्रकार गुप्त रूप से काम कर सकते हैं। लेकिन क्या "गुप्त रूप से काम करता है" पूरी तरह से पोर्टेबल नहीं है। – CTMacUser