C (ANSI, C99, आदि) में, संरचनाएं अपने स्वयं के नामस्थान में रहती हैं। लिंक की गई सूची के लिए एक संरचना कुछ इस तरह दिख सकती है:
struct my_buffer_type {
struct my_buffer_type * next;
struct my_buffer_type * prev;
void * data;
};
हालांकि, अधिकांश सी प्रोग्रामर के लिए यह बहुत स्वाभाविक लगता है कि वे निम्नलिखित की तरह उन संरचनाओं को स्वचालित रूप से टाइप करें
typedef struct tag_buffer_type {
struct tag_buffer_type * next;
struct tag_buffer_type * prev;
void * data;
} my_buffer_type;
और फिर संरचना को एक सामान्य प्रकार की तरह संदर्भित करें, अर्थात get_next_element(my_buffer_type * ptr)
।
अब मेरा प्रश्न है: क्या इसका कोई विशेष कारण है?
विकिपीडिया कहता है http://en.wikipedia.org/wiki/Typedef#Usage_concerns
कुछ लोग टाइपफेड के व्यापक उपयोग के विरोध में हैं। अधिकांश तर्क इस विचार पर केन्द्रित होते हैं कि टाईपडेफ़ केवल एक चर के वास्तविक डेटा प्रकार को छिपाते हैं। उदाहरण के लिए, ग्रेग क्रोह-हार्टमैन, एक लिनक्स कर्नेल हैकर और डॉक्यूमेंटेटर, फ़ंक्शन प्रोटोटाइप घोषणाओं को छोड़कर किसी भी चीज़ के लिए उनके उपयोग को हतोत्साहित करते हैं। उनका तर्क है कि यह प्रथा न केवल अनावश्यक रूप से कोड को बाधित करती है, इससे प्रोग्रामर गलती से बड़ी संरचनाओं का दुरुपयोग भी कर सकते हैं और उन्हें सरल प्रकार समझ सकते हैं। [४]
अन्य लोगों का तर्क है कि टाइपडेफ़्स के उपयोग से कोड को बनाए रखना आसान हो सकता है। K & R का कहना है कि एक टाइपेडिफ का उपयोग करने के दो कारण हैं। सबसे पहले, यह एक प्रोग्राम को अधिक पोर्टेबल बनाने का साधन प्रदान करता है। प्रोग्राम के स्रोत फ़ाइलों में यह हर जगह एक प्रकार बदलने के लिए होने के बजाय, केवल एक टाइप किए गए कथन को बदलना होगा। दूसरा, एक टाइप्डफ एक जटिल घोषणा को समझने में आसान बना सकता है।
मुझे व्यक्तिगत रूप से आश्चर्य होता है कि यदि अलग-अलग struct
नेमस्पेस का कभी-कभी लाभ नहीं होता है, तो कभी-कभी टाइप-बीड स्ट्रक्चर का उपयोग नहीं करना चाहिए और चूंकि आसपास कई सी प्रोग्रामिंग संस्कृतियां हैं (विंडोज सी प्रोग्रामिंग में मेरे अनुभव में लिनक्स सी प्रोग्रामिंग की तुलना में अलग परंपराएं हैं) यदि अन्य हैं ऐसी परंपराएं जिनके बारे में मुझे जानकारी नहीं है।
तब मुझे ऐतिहासिक विचारों (पूर्ववर्तियों, सी के पहले संस्करणों) में दिलचस्पी है।
typedef
है एक चर के वास्तविक प्रकार को छिपाने के लिए।time_t
एक उदाहरण के रूप में लें : यदि लोग अंतर्निहित पूर्णांक प्रकार का उपयोग करते हुए घूमते हैं, तो कार्यान्वयन में परिवर्तन ऐसा था जो 2038 में आवश्यक होगा और एक बहुत सारे कोड को तोड़ देगा। यदि लोग बिना समझे संरचनाओं का उपयोग कर रहे हैं, तो यह प्रोग्रामर की विफलता है, न कि निर्माण की।