वाक्य - विन्यास
एन्यूम <एनम प्रकार का नाम> {Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
……………,
Enumeration_Constant_Element-एन,
};
Enumeration_Constant_Element-1 का डिफ़ॉल्ट मान 0 है, Enumeration_Constant_Element-2 का मान 1 है, Enumeration_Constant_Element-3 का मान 2 है, और Enumeration_Constant_Element-n का मान (n-1) है।
Enum . में गहरा गोता लगाएँ
अब, चूंकि हम एन्यूमरेशन प्रकार को परिभाषित करने के लिए सिंटैक्स जानते हैं, आइए एक उदाहरण देखें:
एन्यूमत्रुटि{
IO_ERROR,
DISK_ERROR,
नेटवर्क त्रुटि
};
Enum कीवर्ड हमेशा एन्यूमरेशन प्रकार को परिभाषित करने के लिए उपयोग किया जाना चाहिए। इसलिए, जब भी आप किसी एन्यूमरेशन प्रकार को परिभाषित करना चाहते हैं, तो आपको पहले एनम कीवर्ड का उपयोग करना चाहिए। Enum कीवर्ड के बाद, आपको परिभाषित करने के लिए एक मान्य पहचानकर्ता का उपयोग करना चाहिए।
उपरोक्त उदाहरण में, कंपाइलर IO_ERROR को इंटीग्रल वैल्यू: 0, DISK_ERROR को इंटीग्रल वैल्यू: 1 और NETWORK_ERROR को इंटीग्रल वैल्यू में असाइन करेगा: 2. डिफ़ॉल्ट रूप से, पहले एनम-एलिमेंट को हमेशा मान 0 दिया जाता है, अगला एनम-एलिमेंट को मान 1 सौंपा गया है, और इसी तरह।
यदि आवश्यक हो तो निरंतर अभिन्न मान को स्पष्ट रूप से निर्दिष्ट करके इस डिफ़ॉल्ट व्यवहार को बदला जा सकता है:
एन्यूमत्रुटि{IO_ERROR= 2,
DISK_ERROR,
नेटवर्क त्रुटि= 8 ,
PRINT_ERROR
};
इस मामले में, IO_ERROR को प्रोग्रामर द्वारा 2 के मान को स्पष्ट रूप से असाइन किया गया है, DISK_ERROR को कंपाइलर द्वारा 3 के मान को असाइन किया गया है, NETWORK_ERROR को प्रोग्रामर द्वारा 8 के मान को स्पष्ट रूप से असाइन किया गया है, और PRINT_ERROR को अगले को असाइन किया गया है। संकलक द्वारा पिछले एनम तत्व NETWORK_ERROR (यानी, 9) का अभिन्न मूल्य।
तो, अब आप समझ गए हैं कि सी में उपयोगकर्ता द्वारा परिभाषित गणना प्रकार को कैसे परिभाषित किया जाए। क्या एनम प्रकार का एक चर घोषित करना संभव है (जैसा कि हम पूर्णांक प्रकार का एक चर घोषित कर सकते हैं)? हाँ यही है! आप एनम वैरिएबल को निम्नानुसार घोषित कर सकते हैं:
एन्यूमत्रुटि Hw_Error;फिर से, एनम यहां कीवर्ड है, एरर एनम टाइप है, और Hw_Error एक एनम वैरिएबल है।
अब हम एनम के विभिन्न उपयोगों को समझने के लिए निम्नलिखित उदाहरण देखेंगे:
- उदाहरण 1: डिफ़ॉल्ट एनम परिभाषा उपयोग
- उदाहरण 2: कस्टम एनम परिभाषा उपयोग
- उदाहरण 3: निरंतर अभिव्यक्ति का उपयोग करते हुए एनम परिभाषा
- उदाहरण 4: एनम स्कोप
उदाहरण 1: डिफ़ॉल्ट एनम परिभाषा उपयोग
इस उदाहरण में, आप सीखेंगे कि डिफॉल्ट स्थिरांक मानों के साथ गणना प्रकार को कैसे परिभाषित किया जाए। कंपाइलर एनम तत्वों को डिफ़ॉल्ट मान निर्दिष्ट करने का ध्यान रखेगा। नीचे, आप उदाहरण कार्यक्रम और संबंधित आउटपुट देखेंगे।
#शामिल/* एनम प्रकार को परिभाषित करें */
एन्यूमत्रुटि{
IO_ERROR,
DISK_ERROR,
नेटवर्क त्रुटि
};
NSमुख्य()
{
एन्यूमत्रुटि Hw_Error; /* एनम वैरिएबल बनाना*/
printf ('Hw_Error को IO_ERROR पर सेट करना'एन');
Hw_त्रुटि=IO_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को DISK_ERROR पर सेट करनाएन');
Hw_त्रुटि=DISK_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को NETWORK_ERROR पर सेट करनाएन');
Hw_त्रुटि=नेटवर्क त्रुटि;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
वापसी 0;
}
उदाहरण 2: कस्टम एनम परिभाषा उपयोग
इस उदाहरण में, आप सीखेंगे कि कस्टम स्थिरांक मान के साथ गणना प्रकार को कैसे परिभाषित किया जाए। साथ ही, यह उदाहरण आपको यह समझने में मदद करेगा कि किसी भी यादृच्छिक क्रम में कस्टम स्थिरांक आरंभीकरण कैसे किया जा सकता है। इस उदाहरण में, हमने 1 . के स्थिर मान को स्पष्ट रूप से परिभाषित किया हैअनुसूचित जनजातिऔर 3तृतीयenum तत्वों (यानी, IO_ERROR और NETWORK_ERROR, क्रमशः), लेकिन हमने 2 के लिए स्पष्ट आरंभीकरण को छोड़ दिया हैराऔर 4वांतत्व अब यह संकलक की जिम्मेदारी है कि वह 2 . को डिफ़ॉल्ट मान निर्दिष्ट करेराऔर 4वांenum तत्व (यानी, DISK_ERROR और PRINT_ERROR, क्रमशः)। DISK_ERROR को 3 के मान पर असाइन किया जाएगा और PRINT_ERROR को 9 के मान पर असाइन किया जाएगा। नीचे, आप उदाहरण प्रोग्राम और आउटपुट देखेंगे।
#शामिल/* एनम प्रकार को परिभाषित करें - कस्टम इनिशियलाइज़ेशन*/
एन्यूमत्रुटि{
IO_ERROR= 2,
DISK_ERROR,
नेटवर्क त्रुटि= 8,
PRINT_ERROR
};
NSमुख्य()
{
/* एनम वैरिएबल घोषित करें*/
एन्यूमत्रुटि Hw_Error;
printf ('Hw_Error को IO_ERROR पर सेट करना'एन');
Hw_त्रुटि=IO_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को DISK_ERROR पर सेट करनाएन');
Hw_त्रुटि=DISK_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को NETWORK_ERROR पर सेट करनाएन');
Hw_त्रुटि=नेटवर्क त्रुटि;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को PRINT_ERROR पर सेट करनाएन');
Hw_त्रुटि=PRINT_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
वापसी 0;
}
उदाहरण 3: निरंतर अभिव्यक्ति का उपयोग करते हुए एनम परिभाषा
इस उदाहरण में, आप सीखेंगे कि एनम तत्वों के निरंतर मूल्य को परिभाषित करने के लिए निरंतर अभिव्यक्ति का उपयोग कैसे करें।
#शामिल/ * एनम प्रकार को परिभाषित करें - निरंतर अभिव्यक्ति का उपयोग करके कस्टम आरंभीकरण
निरंतर अभिव्यक्ति का उपयोग यहां के मामले में किया जा रहा है:
ए। IO_ERROR और
बी। नेटवर्क त्रुटि
यह एनम तत्वों को परिभाषित करने का एक असामान्य तरीका है; हालांकि, यह
कार्यक्रम दर्शाता है कि सी में एनम तत्वों के आरंभीकरण का यह तरीका संभव है।
* /
एन्यूमत्रुटि{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
नेटवर्क त्रुटि= 2 == 2,
PRINT_ERROR
};
NSमुख्य()
{
/* एनम वैरिएबल घोषित करें*/
एन्यूमत्रुटि Hw_Error;
printf ('Hw_Error को IO_ERROR पर सेट करना'एन');
Hw_त्रुटि=IO_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को DISK_ERROR पर सेट करनाएन');
Hw_त्रुटि=DISK_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को NETWORK_ERROR पर सेट करनाएन');
Hw_त्रुटि=नेटवर्क त्रुटि;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को PRINT_ERROR पर सेट करनाएन');
Hw_त्रुटि=PRINT_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
वापसी 0;
}
उदाहरण 4: एनम स्कोप
इस उदाहरण में, आप सीखेंगे कि एनम के लिए स्कोपिंग नियम कैसे काम करता है। एक मैक्रो (#define) का उपयोग एनम के बजाय एक स्थिरांक को परिभाषित करने के लिए किया जा सकता था, लेकिन स्कोपिंग नियम मैक्रो के लिए काम नहीं करता है।
#शामिलNSमुख्य()
{
/* एनम प्रकार को परिभाषित करें */
एन्यूमत्रुटि_1{
IO_ERROR= 10,
DISK_ERROR,
नेटवर्क त्रुटि= 3,
PRINT_ERROR
};
{
/* एनम प्रकार को आंतरिक दायरे में परिभाषित करें*/
एन्यूमत्रुटि_1{
IO_ERROR= बीस,
DISK_ERROR,
नेटवर्क त्रुटि= 35,
PRINT_ERROR
};
/* एनम वैरिएबल घोषित करें*/
एन्यूमError_1 Hw_Error;
printf ('Hw_Error को IO_ERROR पर सेट करना'एन');
Hw_त्रुटि=IO_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को DISK_ERROR पर सेट करनाएन');
Hw_त्रुटि=DISK_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को NETWORK_ERROR पर सेट करनाएन');
Hw_त्रुटि=नेटवर्क त्रुटि;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
printf ('एनHw_Error को PRINT_ERROR पर सेट करनाएन');
Hw_त्रुटि=PRINT_ERROR;
printf ('Hw_Error का मान = %dएन',Hw_त्रुटि);
}
वापसी 0;
}
Enum और मैक्रो के बीच तुलना
Enum | मैक्रो |
स्कोपिंग नियम एनम के लिए लागू है। | मैक्रो के लिए स्कोपिंग नियम लागू नहीं है। |
डिफ़ॉल्ट Enum मान असाइनमेंट स्वचालित रूप से होता है। बड़ी संख्या में स्थिरांक को परिभाषित करने में Enum बहुत सहायक होता है। कंपाइलर डिफ़ॉल्ट स्थिर मान आरंभीकरण लेता है। | मैक्रो स्थिरांक मानों का हमेशा प्रोग्रामर द्वारा स्पष्ट रूप से उल्लेख किया जाना चाहिए। बड़ी संख्या में स्थिरांक के लिए यह एक कठिन प्रक्रिया हो सकती है क्योंकि मैक्रो को परिभाषित करते समय प्रोग्रामर को हमेशा प्रत्येक स्थिर मान को मैन्युअल रूप से परिभाषित करना चाहिए। |
निष्कर्ष
सी में एनम प्रोग्राम को स्टैंडअलोन प्रोग्राम या छोटे आकार की परियोजनाओं के लिए एक वैकल्पिक तरीका माना जा सकता है क्योंकि प्रोग्रामर हमेशा एनम के बजाय मैक्रो का उपयोग कर सकते हैं। हालांकि, अनुभवी प्रोग्रामर बड़े पैमाने पर सॉफ्टवेयर विकास परियोजनाओं के लिए मैक्रो पर एनम का उपयोग करते हैं। यह स्वच्छ और पठनीय कार्यक्रम लिखने में मदद करता है।