2010-06-25 19 views
8

enum और #define एक शैली को परिभाषित करने के उदाहरण के लिए, वही काम करने में सक्षम प्रतीत होता है। समझें कि # डिफाईन कंप्रेसर प्रीप्रोसेसर के लिए मैक्रो प्रतिस्थापन है। क्या कोई परिस्थिति किसी दूसरे पर पसंद की जाती है?enum या परिभाषित, मुझे किस का उपयोग करना चाहिए?

typedef enum { 
    SelectionStyleNone, 
    SelectionStyleBlue, 
    SelectionStyleRed 
} SelectionStyle; 

बनाम

#define SELECTION_STYLE_NONE 0 
#define SELECTION_STYLE_BLUE 1 
#define SELECTION_STYLE_RED 2 
+0

यह भी देखें: [क्या मुझे #define, enum या const का उपयोग करना चाहिए?] (Http://stackoverflow.com/questions/112433/should-i-use-define-enum-or-const) – Shog9

उत्तर

3

एक enum सबसे अच्छा आप प्रकार सुरक्षा चाहते हैं। उन्हें प्रतीकों के रूप में भी निर्यात किया जाता है, इसलिए कुछ डिबगर्स उन्हें इनलाइन प्रदर्शित कर सकते हैं जबकि वे परिभाषित नहीं कर सकते हैं।

पाठ्यक्रम के साथ मुख्य समस्या यह है कि उनमें केवल पूर्णांक हो सकते हैं। स्ट्रिंग्स के लिए, फ्लोट इत्यादि ... आप एक कॉन्स या परिभाषा के साथ बेहतर हो सकते हैं।

+0

आपका क्या मतलब है सुरक्षा के बारे में? यह कोड कानूनी है: enum ई {ए = 1}; ई टी = ई (2); और परिणाम अपरिभाषित है। इसलिए enums TYPE सुरक्षित हैं, लेकिन VALUE सुरक्षित नहीं हैं, इसलिए वे लगभग खराब हैं/ – f0b0s

+0

परिभाषित करते हैं कि आप सबकुछ कर सकते हैं, जो कुछ भी साबित नहीं करता है। – kmm

11

कभी परिभाषित करता है का उपयोग न करें जब तक कि आप पूर्वप्रक्रमक की कार्यप्रणाली होनी चाहिए: यह लेख एक बहुत अच्छा विस्तृत उत्तर प्रदान करता है। एक अभिन्न गणना के रूप में सरल कुछ के लिए, एक enum का उपयोग करें।

1

परिभाषाएं enums की तुलना में शायद थोड़ा तेज़ (रनटाइम पर) हैं, लेकिन लाभ संभवतः केवल कुछ मुट्ठी चक्र है, इसलिए यह नगण्य है जब तक कि आप ऐसा कुछ नहीं कर रहे हैं जिसके लिए वास्तव में आवश्यकता होती है। मैं enum के साथ जाना होगा, क्योंकि preprocessor का उपयोग डीबग करना मुश्किल है।

+1

मुझे लगता है कि आपका मतलब है "enum के साथ जाओ"? – nall

1

जब कोई अंतर्निहित भाषा सुविधा है जो आप करना चाहते हैं (इस मामले में, आइटमों की गणना करना), तो आपको शायद उस सुविधा का उपयोग करना चाहिए।

0
#define DEFINED_VALUE 1 
#define DEFINED_VALUE 2 // Warning 
enum { ENUM_VALUE = 1 }; 
enum { ENUM_VALUE = 2 }; // Error 

#define के साथ, सूक्ष्म बग शुरू करने की उच्च संभावना है।

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