2011-03-09 19 views
12

तो एक enum इस तरह काम करता है:#define जितना कुशल है, enum का उपयोग क्यों करें?

enum { 
    false, 
    true 
} 

जो

int false = 0 
int true = 1 

के बराबर है मैं #define साथ enum क्यों स्थानापन्न नहीं होगा?

#define FALSE 0 
#define TRUE 1 

मेरे लिए, ऐसा लगता है जैसे वे परस्पर विनिमय कर रहे। मुझे पता है कि #define तर्कों को संभालने में सक्षम है, इसलिए enum से पूरी तरह से अलग तरीके से संचालित होता है। enum के मुख्य उपयोग वास्तव में क्या हैं जब हमारे पास #defineइस मामले में है?

अगर मुझे लगता है, #define एक प्रीप्रोसेसर सुविधा है, enum में कुछ रनटाइम फायदे होंगे। मैं कितनी दूर हूँ?

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

+1

देखें http://stackoverflow.com/questions/136946/difference-between-enum-and-define-statements – SirDarius

+0

विषम, वह मेरे खोज परिणामों में प्रकट नहीं हुआ। धन्यवाद! – userenum

+1

यह 'int false = 0' के बराबर नहीं है और न ही 'int const false = 0' (जो अधिक उपयुक्त होगा) के बराबर नहीं है। 'int' चर के पास एक पता होगा, फिर आप 'झूठी' कर सकते हैं, जिसे आप 'enum' के लिए नहीं कर सकते। –

उत्तर

25

एनम के फायदे दिखाते हैं जब आपके पास उन चीजों की एक लंबी सूची होती है जिन्हें आप संख्याओं में मैप करना चाहते हैं, और आप उस सूची के मध्य में कुछ डालने में सक्षम होना चाहते हैं। उदाहरण के लिए, आपके पास है:

 
pears 0 
apples 1 
oranges 2 
grapes 3 
peaches 4 
apricots 5 

अब आप संतरे के बाद टेंगेरिन डालना चाहते हैं। #defines के साथ, आपको अंगूर, आड़ू, और खुबानी की संख्या को फिर से परिभाषित करना होगा। enum का उपयोग कर, यह स्वचालित रूप से होगा। हां, यह एक संक्षिप्त उदाहरण है, लेकिन उम्मीद है कि यह आपको विचार देता है।

+1

हां, अब मैं अंतर देखता हूं। धन्यवाद! – userenum

+4

यह एक अच्छा जवाब है। ** लेकिन मानता है ** पाठक (जो कोई एनओयूबी हो सकता है) जानता है कि वह 'नाशपाती 0' के साथ 'एनम' घोषित कर सकती है और बाकी की संख्या नहीं दे सकती है। – gideon

13

मुझे जीडीबी जैसे पर्यावरण में डीबगिंग के लिए उपयोगी लगता है क्योंकि एनम मान संकलन समय (जहां # डिफाईन प्रीप्रोसेसर मैक्रो है) पर संभाला जाता है और इस प्रकार आत्मनिरीक्षण के लिए उपलब्ध होता है।

0

enum एक पूर्णांक निरंतर है। तो, संकलन प्रक्रिया के दौरान एक प्रकार की जांच होगी।

+3

0 और 1 भी पूर्णांक स्थिरांक हैं। –

+0

सही जिम इंगित करने के लिए धन्यवाद। मुझे enum w.r.t. के कुछ प्रभावों के बारे में पढ़ना प्रतीत होता है। टाइपकास्ट और सीधे वास्तविक प्रश्न को देखे बिना इसे व्यक्त किया। एक अन्य प्रकटीकरण ब्लॉक दायरे में enums का उपयोग होगा। –

+0

सी ++ में, enums अलग प्रकार हैं, लेकिन सी में नहीं। –

3

हालांकि आपका प्रश्न सी के रूप में टैग किया गया है, सी ++ में लिखते समय एक बड़ा फायदा होता है, आप enum: s कक्षाओं या नामस्थानों के अंदर रख सकते हैं। इस तरह आप अपने स्थिरांक जैसे 'स्पेसशिप क्लास :: गैलेक्सी' का उल्लेख कर सकते हैं।

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