2009-04-13 9 views
23

यदि मेरे पास हेडर फ़ाइल में निम्न की तरह कुछ है, तो मैं फ़ंक्शन को कैसे घोषित करता हूं जो फ़ू प्रकार का enum देता है?सी में एक समारोह से एक enum लौट रहे हैं?

enum Foo 
{ 
    BAR, 
    BAZ 
}; 

क्या मैं बस निम्न की तरह कुछ कर सकता हूं?

Foo testFunc() 
{ 
    return Foo.BAR; 
} 

या क्या मुझे टाइपपीफ या पॉइंटर्स या कुछ उपयोग करने की आवश्यकता है?

उत्तर

38

सी ++ में, आप केवल Foo का उपयोग कर सकते हैं।

सी में, आपको enum Foo का उपयोग करना होगा जब तक कि आप इसके लिए टाइपिफ़ प्रदान नहीं करते।

और फिर, जब आप बार को संदर्भित करते हैं, तो आप Foo.BAR का उपयोग नहीं करते हैं, लेकिन केवल BAR का उपयोग नहीं करते हैं। सभी गणना स्थिरांक एक ही नामस्थान साझा करते हैं।

इसलिए (सी के लिए):

enum Foo { BAR, BAZ }; 

enum Foo testFunc(void) 
{ 
    return BAR; 
} 

या, एक typedef साथ:

typedef enum Foo { BAR, BAZ } Foo; 

Foo testFunc(void) 
{ 
    return BAR; 
} 
4

मुझे विश्वास है कि enum में व्यक्तिगत मूल्यों अपने आप में पहचानकर्ता हैं, बस का उपयोग करें:

enum Foo testFunc(){ 
    return BAR; 
} 
+0

सी में, यह enum फू की जरूरत है; सी ++ में, बस फू ठीक रहेगा। –

+0

धन्यवाद। या केनी सुझाव देता है कि प्रकार def, मुझे लगता है। – dmckee

+0

हां - या टाइपपीफ काम करेगा, लेकिन सी ++ में जो 'स्वचालित' है लेकिन सी में इसे मैन्युअल रूप से बनाया जाना चाहिए। –

2

मुझे लगता है कि, कुछ compilers

typedef enum tagFoo 
{ 
    BAR, 
    BAZ, 
} Foo; 
+0

सी कंपाइलर्स कार्यप्रणाली के साथ कार्य को स्वीकार करेंगे; सी ++ कंपाइलर्स की आवश्यकता नहीं है। –

2
enum Foo 
{ 
    BAR, 
    BAZ 
}; 

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

enum Foo testFunc() 
{ 
    enum Foo temp = BAR; 
    temp = BAZ; 
    return temp; 
} 

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

  • कोई संबंधित समस्या नहीं^_^