भ्रम इस बारे में आता है क्योंकि कुछ घोषणाएं वास्तव में तीन सी संरचनाओं की घोषणा कर रही हैं। आपको के बीच अंतर को ध्यान में रखना होगा 1. एक टाइपिफ़ घोषणा, 2. एक संरचना परिभाषा, और 3. एक संरचना घोषणा।
वे सभी बहुत अलग सी संरचनाएं हैं। वे सभी अलग-अलग चीजें करते हैं; लेकिन यदि आप चाहते हैं, तो आप उन्हें एक यौगिक निर्माण में जोड़ सकते हैं।
चलो प्रत्येक घोषणा को बदले में देखें।
//================================================
struct foo {
short a;
int b;
float c;
};
यहां हम सबसे बुनियादी संरचना परिभाषा वाक्यविन्यास का उपयोग कर रहे हैं। हम एक सी प्रकार कि बाद में निम्न सिंटैक्स का उपयोग कर उस प्रकार के चर घोषित करने के लिए इस्तेमाल किया जा सकता के रूप में परिभाषित कर रहे हैं foo:
foo myFoo; // Declare a struct variable of type foo.
// =============== ======================================यह अगली घोषणा उसमें पिछले वाक्यविन्यास की तरह है यह एक सी प्रकार की घोषणा करता है, लेकिन यह टाइपपीफ वाक्यविन्यास का उपयोग करता है। चलो पिछले मूल घोषणा का उपयोग करके इसे अपने घटकों में तोड़ दें।
typedef foo bar; // Declare bar as a variable type, the alias of foo.
bar myBar; // This is ssemantically the same as: foo myBar;
अब पिछले वाक्यविन्यास और वॉयला के साथ "foo" को प्रतिस्थापित करें!
typedef struct {
short d;
int e;
float f;
} bar;
//==================================================================
typedef struct _baz {
short a;
int b;
float c;
} baz;
उपर्युक्त वाक्यविन्यास घोषणाओं के निम्नलिखित अनुक्रम के बराबर है।
struct _baz {
short a;
int b;
float c;
}
typedef _baz baz; // Declare baz as an alias for _baz.
baz myBaz; // Is the same as: _baz myBaz;
//========================================================
स्रोत
2015-09-12 07:39:43
यह सी के लिए आपके प्रश्न का उत्तर नहीं देता है, लेकिन मेरा मानना है कि वे सी ++ के लिए सभी सही हैं, हालांकि पहले व्यक्ति को प्राथमिकता दी जाती है। यह सी के विभिन्न संस्करणों के बीच भी बदल सकता है, लेकिन मैं किसी और से बात करने दूँगा, क्योंकि मैं सी/सी ++ के इतिहास पर कोई विशेषज्ञ नहीं हूं। –
सी ++ अलग है: जब आप 'स्ट्रक्चर फू {};' या 'क्लास फू {} लिखते हैं;' वहां, आपको 'typedef' के बिना मुफ्त में 'Foo' मिलता है। –
वे सभी अभी भी काम करेंगे, भले ही वे थोड़ा अलग चीजें कर सकें (जैसे कि आपके नेमस्पेस डब्ल्यू/अतिरिक्त टैग को प्रदूषित करें)। –