_t
आम तौर पर एक अपारदर्शी प्रकार परिभाषा गिर्द घूमती है।
जीसीसी केवल उन नामों को जोड़ते हैं जो _t
आपके द्वारा उपयोग किए जाने वाले आरक्षित नामस्थान के साथ समाप्त होते हैं, मानक सी और पॉसिक्स (जीएनयू सी लाइब्रेरी मैनुअल) के भविष्य के संस्करणों के साथ संघर्ष से बचने के लिए । कुछ शोध के बाद, मुझे आखिरकार POSIX Standard (1003.1, Rationale (Informative)) के अंदर सही संदर्भ मिला:
B.2.12 डेटा प्रकार
इस खंड में '' _t '' में परिभाषित अतिरिक्त प्रकार की आवश्यकता को नाम स्थान प्रदूषण की समस्या से प्रेरित किया गया था। एक हेडर फ़ाइल में एक प्रकार (जहाँ उस प्रकार को IEEE Std 1003.1-2001 द्वारा परिभाषित नहीं किया गया है) को परिभाषित करना मुश्किल है और प्रोग्राम के नाम स्थान पर प्रतीकों को जोड़े बिना किसी अन्य में इसका उपयोग करें। कार्यान्वयनकर्ताओं को अपने प्रकार प्रदान करने की अनुमति देने के लिए, '' _t '' में समाप्त होने वाले प्रतीकों से बचने के लिए सभी अनुरूप अनुप्रयोगों की आवश्यकता होती है, जो कार्यान्वयनकर्ता को अतिरिक्त प्रकार प्रदान करने की अनुमति देता है। क्योंकि प्रकारों का एक प्रमुख उपयोग संरचना सदस्यों की परिभाषा में है, जो (और कई मामलों में) IEEE Std 1003.1-2001 में परिभाषित संरचनाओं में जोड़ा जा सकता है, अतिरिक्त प्रकारों की आवश्यकता अनिवार्य है।
संक्षेप में, मानक का कहना है कि मानक प्रकार की सूची को विस्तारित करने की अच्छी संभावनाएं हैं, इसलिए मानक _t
अपने स्वयं के उपयोग के लिए नामस्थान को प्रतिबंधित करता है ।
उदाहरण के लिए, आपका प्रोग्राम POSIX 1003.1 अंक 6 से मेल खाता है और आपने एक प्रकार परिभाषित किया है foo_t
। POSIX 1003.1 अंक 7 आखिरकार एक नए परिभाषित प्रकार के साथ जारी किया गया है foo_t
। आपका कार्यक्रम नए संस्करण से मेल नहीं खाता है, जो एक समस्या हो सकती है। _t
उपयोग को प्रतिबंधित करने से कोड को फिर से सक्रिय करने से रोकता है। इस प्रकार, यदि आप POSIX अनुपालन का लक्ष्य रखते हैं, तो आपको निश्चित _t
रूप से मानक राज्यों के रूप में इससे बचना चाहिए ।
साइड नोट: व्यक्तिगत रूप से, मैं POSIX से चिपके रहने की कोशिश करता हूं क्योंकि मुझे लगता है कि यह स्वच्छ प्रोग्रामिंग के लिए अच्छी मूल बातें देता है। इसके अलावा, मैं लिनक्स कोडिंग स्टाइल (अध्याय 5) दिशानिर्देशों का बहुत शौकीन हूं । कुछ अच्छे कारण हैं कि टाइपिफ़ाइड का उपयोग क्यों नहीं किया जाता है। उममीद है कि इससे मदद मिलेगी!
int_t
परिभाषित किया गया है? यदि इसे हमेशा परिभाषित किया जाता हैint
, तो यह उपयोगी नहीं है; यहint
सीधे उपयोग करने के लिए बहुत स्पष्ट है । यदि इसे हमेशा के रूप में परिभाषित नहीं किया जाता हैint
(जैसे, यदि यह हो सकता हैlong int
याshort int
), तो यह एक खराब चुना हुआ और भ्रमित करने वाला नाम है।