खोज…


टिप्पणियों

Enumerations में enum कीवर्ड और एक वैकल्पिक आइडेंटिफ़ायर होता है, जिसके बाद enumerator- लिस्ट होती है, जिसमें ब्रेसिज़ होते हैं।

एक पहचानकर्ता टाइप int

एन्यूमरेटर-सूची में कम से कम एक एन्यूमरेटर तत्व होता है।

एक एन्यूमरेटर वैकल्पिक रूप से " int " प्रकार की एक स्थिर अभिव्यक्ति "असाइन" किया जा सकता है।

एक एन्यूमरेटर स्थिर है और एक char , एक हस्ताक्षरित पूर्णांक या एक अहस्ताक्षरित पूर्णांक के लिए अनुकूल है। जो कभी भी उपयोग किया जाता है वह कार्यान्वयन-परिभाषित है । किसी भी मामले में उपयोग किया जाने वाला प्रकार प्रश्न में गणना के लिए परिभाषित सभी मूल्यों का प्रतिनिधित्व करने में सक्षम होना चाहिए।

यदि कोई निरंतर अभिव्यक्ति किसी एन्यूमरेटर को "असाइन" नहीं किया गया है और यह एन्यूमरेटर-लिस्ट में 1 सेंट प्रविष्टि है तो इसे 0 का मान प्राप्त होता है, अन्यथा इसे एन्यूमरेटर-लिस्ट प्लस 1 में पिछली प्रविष्टि का मान मिलता है।

कई "असाइनमेंट" का उपयोग करने से एक ही एन्यूमरेशन के विभिन्न एन्यूमरेटर्स समान मान ले सकते हैं।

सरल गणन

गणना एक उपयोगकर्ता द्वारा परिभाषित डेटा प्रकार में अभिन्न स्थिरांक होते हैं और प्रत्येक अभिन्न स्थिरांक को एक नाम दिया जाता है। Keyum enum का उपयोग enumerated data type को परिभाषित करने के लिए किया जाता है।

यदि आप int या string/ char* बजाय enum उपयोग करते हैं, तो आप संकलन-समय की जाँच बढ़ाते हैं और अमान्य स्थिरांक में त्रुटियों से बचने से बचते हैं, और आप दस्तावेज़ का उपयोग करते हैं कि कौन से मूल्य कानूनी हैं।

उदाहरण 1

enum color{ RED, GREEN, BLUE };

void printColor(enum color chosenColor)
{
    const char *color_name = "Invalid color";
    switch (chosenColor)
    {
       case RED:
         color_name = "RED";
         break;
       
       case GREEN:
        color_name = "GREEN";
        break;    

       case BLUE:
        color_name = "BLUE";
        break;
    }
    printf("%s\n", color_name);
}

निम्नानुसार परिभाषित एक मुख्य कार्य के साथ (उदाहरण के लिए):

int main(){
    enum color chosenColor;
    printf("Enter a number between 0 and 2");
    scanf("%d", (int*)&chosenColor);
    printColor(chosenColor);
    return 0;
}
C99

उदाहरण 2

(यह उदाहरण निर्दिष्ट शुरुआती का उपयोग करता है जो C99 से मानकीकृत हैं।)

enum week{ MON, TUE, WED, THU, FRI, SAT, SUN };
     
static const char* const dow[] = { 
  [MON] = "Mon", [TUE] = "Tue", [WED] = "Wed", 
  [THU] = "Thu", [FRI] = "Fri", [SAT] = "Sat", [SUN] = "Sun" };
    
void printDayOfWeek(enum week day) 
{ 
   printf("%s\n", dow[day]);
}

रेंज चेकिंग का उपयोग कर एक ही उदाहरण:

enum week{ DOW_INVALID = -1, 
  MON, TUE, WED, THU, FRI, SAT, SUN, 
  DOW_MAX };
     
static const char* const dow[] = { 
  [MON] = "Mon", [TUE] = "Tue", [WED] = "Wed", 
  [THU] = "Thu", [FRI] = "Fri", [SAT] = "Sat", [SUN] = "Sun" };
    
void printDayOfWeek(enum week day) 
{ 
   assert(day > DOW_INVALID && day < DOW_MAX);
   printf("%s\n", dow[day]);
}

टाइप्डिफ एनम

एक गणना के नाम पर कई संभावनाएं और रूकावटें हैं। सबसे पहले enum keyword के बाद एक टैग नाम का उपयोग करना है।

enum color
{ 
    RED, 
    GREEN, 
    BLUE 
};

इस गणना को हमेशा कीवर्ड और इस तरह टैग के साथ उपयोग किया जाना चाहिए:

enum color chosenColor = RED;

अगर हम का उपयोग typedef सीधे जब घोषित enum , हम टैग नाम को छोड़ सकते हैं और उसके बाद बिना प्रकार का उपयोग enum कीवर्ड:

typedef enum 
{ 
    RED, 
    GREEN, 
    BLUE 
} color;

color chosenColor = RED;

लेकिन इस बाद के मामले में हम इसे enum color रूप में उपयोग नहीं कर सकते हैं, क्योंकि हमने परिभाषा में टैग नाम का उपयोग नहीं किया है। एक आम सम्मेलन दोनों, ऐसी है कि एक ही नाम के साथ या बिना इस्तेमाल किया जा सकता का उपयोग करना है enum कीवर्ड। यह C ++ के साथ संगत होने का विशेष लाभ है

enum color                /* as in the first example */
{ 
    RED, 
    GREEN, 
    BLUE 
};
typedef enum color color; /* also a typedef of same identifier */

color chosenColor  = RED;
enum color defaultColor = BLUE;

समारोह:

void printColor()
{
    if (chosenColor == RED)
    {
        printf("RED\n");
    }
    else if (chosenColor == GREEN)
    {
        printf("GREEN\n");    
    }
    else if (chosenColor == BLUE)
    {
        printf("BLUE\n");
    }
}

टाइपिफ़ पर अधिक देखने के लिए typedef

डुप्लिकेट मान के साथ गणना

किसी भी तरह से एक गणना मूल्य अद्वितीय होने की जरूरत है:

#include <stdlib.h> /* for EXIT_SUCCESS */
#include <stdio.h> /* for printf() */


enum Dupes
{
   Base, /* Takes 0 */
   One, /* Takes Base + 1 */
   Two, /* Takes One + 1 */
   Negative = -1,
   AnotherZero /* Takes Negative + 1 == 0, sigh */
};

int main(void)
{
  printf("Base = %d\n", Base);
  printf("One = %d\n", One);
  printf("Two = %d\n", Two);
  printf("Negative = %d\n", Negative);
  printf("AnotherZero = %d\n", AnotherZero);

  return EXIT_SUCCESS;
}

नमूना प्रिंट:

Base = 0
One = 1
Two = 2
Negative = -1
AnotherZero = 0

टाइपनेम के बिना गणना निरंतर

उन्हें नाम दिए बिना गणना प्रकार भी घोषित किए जा सकते हैं:

  enum { buffersize = 256, };
  static unsigned char buffer [buffersize] = { 0 };

इस प्रकार के संकलन समय स्थिरांक को परिभाषित करने के लिए सक्षम बनाता है int है कि इस उदाहरण में सरणी की लंबाई के रूप में इस्तेमाल किया जा सकता।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow