सी में अगर मैं एक struct/संघ/enum की घोषणा:टाइपपीफ बनाम स्ट्रक्चर/यूनियन/एनम के पीछे तर्क क्या है, क्या केवल एक नामस्थान नहीं हो सकता है?
struct Foo { int i ... }
जब मैं अपने संरचना का उपयोग करने मैं टैग निर्दिष्ट करने की आवश्यकता हैं:
struct Foo foo;
इस आवश्यकता को ढीला करने के लिए, मैं करने के लिए है उर्फ मेरी संरचना typedef का उपयोग कर:
typedef struct Foo Foo;
क्यों सभी प्रकार/structs नहीं/एक ही डिफ़ॉल्ट रूप से "नाम स्थान" में जो कुछ भी? प्रत्येक परिवर्तनीय घोषणा पर घोषणा टैग की आवश्यकता के निर्णय के पीछे तर्क क्या है (जब तक टाइपडेफ़ेड नहीं हो) ???
कई अन्य भाषाएं इस भेद को नहीं बनाती हैं, और ऐसा लगता है कि यह केवल जटिलता आईएमएचओ का एक अतिरिक्त स्तर ला रहा है।
जगह के बारे में '#define LPFOO * FOO' से अधिक जटिल नहीं :(हालांकि, अधिकांश कोड में मैंने संरचना फू और फू को अलग-अलग नाम दिए हैं (उदाहरण के लिए Foo_t और Foo या आपके पास क्या है) भले ही वे संकलक के लिए अलग-अलग 'नेमस्पेस' में हैं। –
क्या आप कृपया उल्लेख कर सकते हैं कि सी ++ को छोड़कर "अन्य भाषाएं" क्या हैं? – Arun
@ अरुण: सी # और जावा अपने प्रकार को "अलग टैग नेमस्पेस" में नहीं डालते हैं (लेकिन वे अंदर हो सकते हैं ग्लोबल नेमस्पेस समेत एक वास्तविक नेमस्पेस, जो सी) – paercebal