2010-03-23 31 views
9

जब मैं इस तरह एक enum चर घोषित करता हूं:एनम वैरिएबल के साथ मैं क्या कर सकता हूं?

enum paint_colors { RED, GREEN, BLUE, ...} colors; 

colors चर उपयोगी है? यदि हां, तो मैं इसके साथ क्या कर सकता हूं?

अग्रिम धन्यवाद।

+0

@drigoSkalWalker, मैंने आपके लिए अपना वाक्यविन्यास तय किया है। मुझे उम्मीद है कि मैं सही सवाल समझ गया हूं। –

+0

मैंने अब कई उत्तरों को कम किया है। वहां तेजी से बंदूकें, पहले पढ़ें, बाद में आग। वह enum मूल्यों के बारे में नहीं पूछ रहा है, लेकिन enum चर के बारे में। सभी जवाब लेकिन पहले व्यक्ति इसे पूरी तरह अनदेखा करते हैं। – Suma

उत्तर

9

आंतरिक रूप से, enum को एक पूर्णांक के रूप में माना जाता है जो केवल मूल्यों की सीमित सीमा रख सकता है। इस मामले में, स्थिरांक RED, GREEN, BLUE, ... परिभाषित किया जाएगा और 0, 1, 2, ... (क्रमशः) के बराबर होगा। परिवर्तनीय colors कहीं भी int का उपयोग किया जा सकता है। रंगों की सूची के माध्यम से आप ++ जैसे ऑपरेटरों का उपयोग कर सकते हैं। enum paint_colors colors और int colors घोषित करने के बीच एकमात्र अंतर यह है कि गणित को समेकित स्थिरांक में से एक असाइन किया जाना चाहिए।

यह आपको #define का उपयोग करके स्थिरांक की श्रृंखला बनाने और colors के लिए सामान्य int का उपयोग करने पर कई लाभ देता है। सबसे पहले, कुछ डिबगर्स यह पता लगा सकते हैं कि colors एक समेकित प्रकार है और संख्यात्मक मान के बजाय गणना किए गए स्थिरांक का नाम प्रदर्शित करेगा।

अधिक महत्वपूर्ण बात यह है कि यह प्रकार की जांच की एक अतिरिक्त परत जोड़ सकता है।सी मानक द्वारा इसकी आवश्यकता नहीं है, लेकिन कुछ कंपाइलर जांचते हैं और सुनिश्चित करते हैं कि समेकित प्रकार के चर के लिए आवंटित मान अंकित स्थिरांक में से एक के अनुरूप हैं।

#define RED 0 
#define GREEN 1 
#define BLUE 2 
typedef int paint_colors; 
paint_colors colors; 

चर एक int की तरह व्यवहार किया जाता है, लेकिन स्पष्ट रूप से यह एक अलग प्रकार दे रही है क्या चर रहा है और यह क्या है स्पष्ट करने के लिए मदद करता है:

मानसिक रूप से, आप लगभग इस के बारे में सोच सकते हैं कह रही है के समान है के लिए इस्तेमाल होता है।

0

जब आपके पास संभावित मूल्यों का एक निर्धारित सेट होता है, तो प्रत्येक enum सहायक होता है, जहां प्रत्येक मान का सार्थक नाम होता है। कहीं और, आप "जादू संख्या" की बजाय enum मानों का उल्लेख करते हैं, जो अन्य कोड के बीच अर्थहीन हो सकता है।

+0

ऐसा नहीं है कि ओपी क्या पूछ रहा है, मुझे लगता है। वह जानना चाहता है कि 'रंग' क्या अच्छा है। –

+0

हम्म, स्पष्ट रूप से मैंने इस सवाल को गलत समझा। –

13

वास्तव में आप जो भी कर रहे हैं वह गणना की शेष परिभाषा के साथ एक परिवर्तनीय इनलाइन घोषित कर रहा है। यह बराबर है करने के लिए:

typedef enum _paint_colors { RED, GREEN, BLUE } paint_colors; 

आप अधिक प्रकार में बनाया तरह गणन उपयोग करने देता है कौन सा:

enum paint_colors { RED, GREEN, BLUE }; 
enum paint_colors colors; 

अक्सर, आप एक typedef परिभाषा के साथ जुड़े देखेंगे

paint_colors color; 

तो आपके प्रश्न का उत्तर यह है कि colorsenum paint_colors प्रकार का एक चर है, और किसी भी तरह का उपयोग किया जा सकता है जो आपको लगता है कि इस तरह के चर के लिए उपयुक्त है:

colors = RED; 
if (colors != GREEN) 
{ 
    colors = BLUE; 
} 

और इसी तरह।

+0

यह मेरे लिए बेकार है, और सी के लिए मैं int या अन्य प्रकारों का उपयोग पेंट_color प्रकार के बजाय कर सकता हूं, परिवर्तनीय रंग अभी भी बेकार है। – drigoSkalWalker

+0

@drigoSkalWalker, यह आपको कुछ सीमित टाइपकेकिंग करने देता है। यदि आप उनका उपयोग नहीं करना चाहते हैं, तो आपको यह नहीं करना है। हालांकि यह काम में आ सकता है। –

+2

अब आप दो प्रश्न पूछ रहे हैं। चाहे _variable_ 'रंग' उपयोगी है, शेष कार्यक्रम पर निर्भर करता है। _type_ 'enum paint_colors' उपयोगी है क्योंकि यह इस चर और अन्य के लिए इरादे और मूल्य सीमा को संचारित करता है - यह व्हाट ('यह 3 रंगों में से एक है') पर अधिक जोर देता है, और कैसे ('यह संग्रहीत है) पर अधिक जोर देता है एक int के रूप में ')। – Lars

1

आप रोलर कोस्टर पेंट कर सकते हैं!

typedef struct { 
    Color car; 
    Color door_handle; 
    Color wheels; 
} RollerCoasterColors; 

int main(void) { 
    RollerCoasterColors roller_coaster_colors; 
    roller_coaster_colors.car = RED; 
    roller_coaster_colors.door_handle = YELLOW; 
    roller_coaster_colors.wheels = PURPLE; 

    // now paint_roller_coaster() knows what colour to paint each part! 
    paint_roller_coaster(roller_coaster_colors); 
} 
+0

वह 'रंग' चर का उपयोग नहीं करता है, जो ओपी के बारे में पूछ रहा था। –

-1

मुझे डीबगिंग के दौरान विशेष रूप से उपयोगी enums मिलते हैं। यदि आप कुछ चर के लिए मान के रूप में उपयोग किए गए स्थिरांक को परिभाषित करने के लिए बस #define का उपयोग करते हैं तो डीबगर आपको संख्या दिखाएगा। Enum के साथ यह आपको नाम दिखा सकता है।

और यदि आपको एक एकल चर के लिए संभावित मानों (स्थिरांक) के सेट की आवश्यकता है तो आप इसे दिखाए गए तरीके को परिभाषित कर सकते हैं।

0

सी में, एनम प्रकार परिवर्तक को फिर से चालू किया जा सकता है, जैसे ++, +; लेकिन सी ++ में इसकी अनुमति नहीं है;

enum WEEKDAY {MON, TUE, WED, THU, FRI, SAT, SUN, END}; 
for(WEEKDAY day = 0; day < END; day++){ 
    printf("day index = %d\n", day); 
} 

सी में संकलित किया जा सकता है, लेकिन सी ++ में नहीं;

संबंधित मुद्दे

 संबंधित मुद्दे