अंतर यह है कि दूसरा दृष्टिकोण enum SomeEnum
नामक एक प्रकार की घोषणा करता है और उस प्रकार के लिए एक उपनाम टाइप किए गए नाम SomeEnum
भी घोषित करता है। यह वास्तव में बराबर एक लाइनर
typedef enum SomeEnum { first, second, third } SomeEnum;
जो कि दो दृष्टिकोणों के बीच फर्क सिर्फ इतना है enum
कीवर्ड के बाद एक नाम लगा सकते हैं कि यह बजाय स्पष्ट करता है में जोड़ा जा सकता। दूसरे दृष्टिकोण के साथ, आप SomeEnum e
या enum SomeEnum e
का उपयोग करके उस एनम प्रकार के ऑब्जेक्ट को घोषित कर सकते हैं, जो भी आप चाहें।
पहला दृष्टिकोण केवल मूल रूप से अज्ञात enum प्रकार के लिए typedef-name SomeEnum
घोषित करता है, जिसका अर्थ है कि आप SomeEnum e
घोषणाओं तक सीमित हैं।
तो, जब तक आप केवल अपनी घोषणाओं में टाइप किए गए नाम SomeEnum
का उपयोग करते हैं, तो दोनों के बीच कोई अंतर नहीं होगा। हालांकि, कुछ मामलों में आपको enum SomeEnum
प्रकार के पूर्ण मूल नाम का उपयोग करना पड़ सकता है। पहले दृष्टिकोण में नाम उपलब्ध नहीं है, इसलिए आप भाग्य से बाहर होंगे।
उदाहरण के लिए, अगर इसके बाद के संस्करण घोषणा के बाद आप भी कुछ नेस्टेड गुंजाइश
int SomeEnum;
वैरिएबल का नाम enum की typedef नाम छुपा देगा में SomeEnum
नामक एक चर घोषित है, इस प्रकार इस घोषणा अवैध बनाने
SomeEnum e; /* ERROR: `SomeEnum` is not a type */
हालांकि, अगर आप दूसरा दृष्टिकोण जब अपने enum की घोषणा का इस्तेमाल किया है, तो आप इस समस्या को हल पूर्ण प्रकार का नाम
का उपयोग करके काम कर सकते हैं
enum SomeEnum e; /* OK */
यदि आप अपने एनम प्रकार की घोषणा करते समय पहले दृष्टिकोण का उपयोग करते हैं तो यह संभव नहीं होगा।
जब structs के साथ प्रयोग किया, struct
के बाद नाम बहुत जरूरी है जब आप एक स्वत: संदर्भ प्रकार (एक प्रकार है कि एक ही प्रकार के लिए सूचक होता है) की जरूरत है,
typedef struct SomeStruct {
struct SomeStruct *next;
} SomeStruct;
की तरह अंत में, में दूसरा दृष्टिकोण टाइपपीफ नाम पूरी तरह से वैकल्पिक है। आप बस
enum SomeEnum { first, second, third };
घोषणा कर सकते हैं और सिर्फ हर बार जब आप इस प्रकार का उल्लेख करने की जरूरत है enum SomeEnum
का उपयोग करें।