मान लें कि आप का मतलब:
typedef struct someobj
{
/* ... */
} someobj_t;
सामान्य में अंतर सिर्फ शैलीगत है; कुछ लोग structs के लिए "पुरानी सी" शैली नामकरण (जहां आपको struct
कीवर्ड को किसी भी समय संदर्भित कर रहे हैं) को चिपकाना पसंद करते हैं, अन्य someobj_t
का उपयोग करने के अधिक सिंथेटिक तरीके की तरह।
typedef
द्वारा परिभाषित प्रतीक का उपयोग करने वाले बहुत से लोग इसे अधिक प्राकृतिक महसूस करते हैं क्योंकि अक्सर वे अन्य भाषाओं (जैसे सी ++, सी #, ...) से आते हैं जहां struct
चीज़ की आवश्यकता नहीं होती है। कई मामलों में वे घोषणा से struct
नाम भी छोड़ देते हैं और बस typedef
एड नाम छोड़ देते हैं।
उन दो प्रतीकों का उपयोग सामान्य समकक्ष में है, लेकिन कुछ चेतावनी हैं; सबसे पहले, typedef
के अंत से पहले _t
संस्करण मौजूद नहीं है, इसलिए आप _t
नाम का उपयोग करके खुद को संरचना में पॉइंटर्स घोषित नहीं कर सकते हैं।
फिर, typedef
केवल संकलन के दौरान "मौजूद" है; इसका मतलब है कि कंपाइलर और डीबगर आपके प्रतीक को गैर-typedef
एड नाम के साथ संदर्भित करेंगे।यदि आप typedef
का उपयोग "वास्तविक" संरचना नाम के बिना करते हैं, तो जब आपको कुछ कंपाइलर्स/डिबगर्स के साथ त्रुटियों की जांच करनी पड़ती है तो आप पागल हो सकते हैं क्योंकि आप वास्तविक नाम के बिना typedef
एड संरचनाओं के बाद से "वास्तविक" संरचना नाम का संदर्भ नहीं ले सकते हैं वास्तव में अज्ञात संरचनाएं हैं।
यह विशेष रूप से समस्याग्रस्त हो सकता है यदि आपको अपनी संरचना को MIDL और उस तरह की सामग्री के साथ निर्यात करना है; अधिक जानकारी के लिए रेमंड चेन द्वारा this post देखें।
अंतिम लेकिन कम से कम नहीं, आप केवल असली संरचना नाम के साथ घोषणाएं कर सकते हैं; और यदि आपके पास संरचना का नाम नहीं है (लेकिन केवल typedef
) तो आप घोषणाओं को आगे नहीं कर सकते हैं।
स्रोत
2010-12-08 00:45:39
क्या आप 'typedef' खो रहे हैं? –
क्या आप वाकई सही प्रश्न प्राप्त कर चुके हैं? 'someobj_t' एक ऑब्जेक्ट है, एक प्रकार नहीं, हो सकता है कि आपने अपने कोड में एक एकल 'टाइपपीफ' छोड़ा हो। – Kos
'_t' नोटेशन, मान लीजिए कि आप टाइपिफ़ का मतलब रखते हैं, अगर केवल 'संरचना कुछबोज' और 'someobj'' को समझने के लिए एक सम्मेलन (मान लीजिए कि यह टाइप किया गया नाम था) - ऐसा इसलिए है क्योंकि सी के लिए दो अलग-अलग" नामस्थान "हैं ये (संरचना और टाइपिफ), और संभवतः यह सम्मेलन कोड में अर्थशास्त्र जोड़ने में मदद करता है। –