2010-02-27 16 views
5

मैं सिर्फ सी बहुत हाल ही में शुरू कर दिया है और मैं जिसमें कोड का निम्न भाग दिखाई देता है कुछ कोडिंग अभ्यास जवाब देने के लिए कहा गया है:आसान सी enum सवाल

typedef enum { 
    false = 0, 
    true = 1 
} Bool; 

किसी के लिए एक संक्षिप्त और स्पष्ट विवरण उपलब्ध कराएं उस?

बहुत बहुत धन्यवाद।

+0

होमवर्क टैग की आवश्यकता है? –

+1

हर बार इस तरह के एक प्रश्न से पूछा जाता है और उत्तर देने लगता है, वह जानता है कि उसने अपना जवाब पोस्ट करने से पहले कम से कम अन्य 5 लोग होंगे जिन्होंने पहले से ही अपने आप को पोस्ट किया था, उम्मीद है कि वह आसानी से सौ अंक के लिए उनकी तरह उम्मीद कर रहे हैं। : पी –

+1

इसलिए, इस सवाल का जवाब देने वाले अनंत उपयोगकर्ता हैं। (और उनमें से अनंत ने डुप्लिकेशंस को महसूस करने के बाद खुद को हटा दिया ताकि आप केवल 6 देख सकें): पी – kennytm

उत्तर

11

यह वास्तव में दो चीजें कर रहा है;

enum _bool { 
    false = 0, 
    true = 1 
}; 

और::

typedef enum _bool Bool; 

इस कोड को एक नई गणना प्रकार बनाता है और फिर यह एक सुविधाजनक नाम देने के लिए typedef का उपयोग करता है आप यह कुछ इस तरह तोड़ नीचे कर सकते हैं। यह आपको अपने कोड में Bool नामक एक नए 'प्रकार' का उपयोग करने देगा, और इसे false और true मानों को असाइन करेगा। यहां एक साधारण उपयोग केस है:

Bool logical_not(Bool in) 
{ 
    if (in == true) 
     return false; 
    else 
     return true; 
} 
+0

स्पष्ट रूप से सबमिट किया गया कोड ऐसा नहीं करता है, क्योंकि _bool मूल में मौजूद नहीं है। मैं यहां आया क्योंकि मैं "अज्ञात enum" पर कुछ दस्तावेज़ ढूंढने की कोशिश कर रहा था, जहां तक ​​मैं चिंतित हूं इस जवाब को उत्तर का हिस्सा बनने के लिए समझाएं। –

+0

गणनाओं को लेबल या टाइपपीफ की आवश्यकता नहीं है; 'enum {ए, बी, सी}' मान्य कोड है। आप क्या पूछने की कोशिश कर रहे हैं? –

1

चूंकि सी में बूलियन डेटा प्रकार नहीं है, इसलिए आपका कोड टाइपपीफ का उपयोग करके एक को अनुकरण करता है।

आप इस प्रकार नया उपयोगकर्ता परिभाषित डेटा प्रकार का उपयोग कर सकते हैं:

Bool find_key_in_array() { 
     Bool found = false; // assume not found. 

     // do searching and set found suitably.  

     return found; 
} 

int main() { 

     Bool result = find_key_in_array(); 

     return 0; 
} 
1

यह सच और झूठे के लिए पठनीय शाब्दिक प्रदान करता है। लेकिन आप अनुमान लगा सकते हैं।

यह कैसे काम करता है? एक गणना (कीवर्ड enum) पूर्णांक मानों के साथ टोकन की एक श्रृंखला को जोड़ता है, और typedef ... Bool;Bool गणना के टाइपनाम को बनाता है।

कुल मिलाकर मैं इस मुहावरे को हतोत्साहित होगा क्योंकि बाद में

int flag=false; 
// something happens that might change the setting of flag that *doesn't* use the enum 
if (flag == true) { 
    //... 
} 

का उपयोग करने के लिए परीक्षा हो सकती है और अगर flag 2 करने के लिए सेट किया गया यह आप क्या उम्मीद नहीं करेंगे।

यदि आप लंबे समय तक सी का उपयोग करते हैं तो शून्य शून्य है सबकुछ सही व्याख्या है दूसरी प्रकृति होगी।

1

एक enum एक अभिन्न प्रकार है जिसमें प्रतीकात्मक मूल्यों की सीमित संख्या है। , बूल, इस गणना करने के लिए (के माध्यम से typedef)

यह एक गणन वाणी और फिर एक नाम एकत्रित करती है: यह आप की तरह बातें करते हैं अनुमति देता है:

Bool finish = false; 

while (finish != true) 
{ 
    ... 
} 
0

मैं क्या याद से। आप सी enumerations here

4

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

अधिक जानकारी के लिए wiki article विस्तृत आंकड़ों के बारे में (और विशेष रूप से इसके C section) देखें।

वह विशिष्ट enum एक बूलियन प्रकार को परिभाषित करता है, यानी एक प्रकार जो केवल दो मानों को मान सकता है: सत्य और झूठा, जहां झूठा =! सच है। बूलियन मान अक्सर प्रोग्रामिंग में उपयोग किए जाते हैं, उदाहरण के लिए झंडे के रूप में संकेत मिलता है कि कोई शर्त पूरी हो जाती है, और वास्तव में कई भाषाओं में उन्हें मूल प्रकार (सी ++ और सी 99, उदाहरण के लिए, ऐसा करते हैं) के रूप में शामिल किया जाता है।

वैसे, कि enum परिभाषित करने के लिए इस:

enum Bool 
{ 
    false = 0, 
    true = 1 
}; 

पर्याप्त होगा; typedef चाल का उपयोग करने के बजाय, आप एक परिभाषित

enum Bool myFlag=true; 

,: हालांकि, की वजह से कैसे सी इस कोड के साथ बूल प्रकार का एक चर घोषित करने के लिए डिजाइन किया गया था आप बूल से पहले हमेशा enum कीवर्ड डालने के लिए की आवश्यकता होगी उस तरह से गुमनाम enum बनाया, और फिर आप बूल नाम के लिए एक उपनाम प्रदान करते हैं; इस तरह आप बस कर सकते हैं:

Bool myFlag=true; 
संबंधित मुद्दे