logo

Enum i C

Uppräkningen i C är också känd som den uppräknade typen. Det är en användardefinierad datatyp som består av heltalsvärden, och den ger meningsfulla namn till dessa värden. Användningen av enum i C gör programmet lätt att förstå och underhålla. Enum definieras genom att använda nyckelordet enum.

Följande är sättet att definiera enum i C:

 enum flag{integer_const1, integer_const2,.....integter_constN}; 

I ovanstående deklaration definierar vi enummet som heter flaggan som innehåller 'N' heltalskonstanter. Standardvärdet för integer_const1 är 0, integer_const2 är 1, och så vidare. Vi kan också ändra standardvärdet för heltalskonstanterna vid tidpunkten för deklarationen.

Till exempel:

 enum fruits{mango, apple, strawberry, papaya}; 

Standardvärdet för mango är 0, äpple är 1, jordgubb är 2 och papaya är 3. Om vi ​​vill ändra dessa standardvärden kan vi göra enligt nedan:

 enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, }; 

Uppräknad typdeklaration

Eftersom vi vet att i C-språket måste vi deklarera variabeln av en fördefinierad typ som int, float, char, etc. På samma sätt kan vi deklarera variabeln för en användardefinierad datatyp, som enum. Låt oss se hur vi kan deklarera variabeln för en enumtyp.

Anta att vi skapar en uppräkning av typstatus som visas nedan:

 enum status{false,true}; 

Nu skapar vi variabeln av statustyp:

 enum status s; // creating a variable of the status type. 

I ovanstående uttalande har vi deklarerat variabeln 's' av typen status.

För att skapa en variabel kan ovanstående två påståenden skrivas som:

 enum status{false,true} s; 

I det här fallet kommer standardvärdet för false att vara lika med 0 och värdet på sant kommer att vara lika med 1.

Låt oss skapa ett enkelt program med enum.

 #include enum weekdays{Sunday=1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; int main() { enum weekdays w; // variable declaration of weekdays type w=Monday; // assigning value of Monday to w. printf('The value of w is %d',w); return 0; } 

I koden ovan skapar vi en uppräkningstyp som heter veckodagar, och den innehåller namnet på alla de sju dagarna. Vi har tilldelat 1 värde till söndagen, och alla andra namn kommer att få ett värde som föregående värde plus ett.

Produktion

Enum i C

Låt oss visa ett annat exempel för att förstå uppräkningen tydligare.

 #include enum months{jan=1, feb, march, april, may, june, july, august, september, october, november, december}; int main() { // printing the values of months for(int i=jan;i<=december;i++) { printf('%d, ',i); } return 0; < pre> <p>In the above code, we have created a type of enum named as months which consists of all the names of months. We have assigned a &apos;1&apos; value, and all the other months will be given a value as the previous one plus one. Inside the main() method, we have defined a for loop in which we initialize the &apos;i&apos; variable by jan, and this loop will iterate till December.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-2.webp" alt="Enum in C"> <h3>Why do we use enum?</h3> <p>The enum is used when we want our variable to have only a set of values. For example, we create a direction variable. As we know that four directions exist (North, South, East, West), so this direction variable will have four possible values. But the variable can hold only one value at a time. If we try to provide some different value to this variable, then it will throw the compilation error.</p> <p>The enum is also used in a switch case statement in which we pass the enum variable in a switch parenthesis. It ensures that the value of the case block should be defined in an enum.</p> <p> <strong>Let&apos;s see how we can use an enum in a switch case statement.</strong> </p> <pre> #include enum days{sunday=1, monday, tuesday, wednesday, thursday, friday, saturday}; int main() { enum days d; d=monday; switch(d) { case sunday: printf(&apos;Today is sunday&apos;); break; case monday: printf(&apos;Today is monday&apos;); break; case tuesday: printf(&apos;Today is tuesday&apos;); break; case wednesday: printf(&apos;Today is wednesday&apos;); break; case thursday: printf(&apos;Today is thursday&apos;); break; case friday: printf(&apos;Today is friday&apos;); break; case saturday: printf(&apos;Today is saturday&apos;); break; } return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-3.webp" alt="Enum in C"> <p> <strong>Some important points related to enum</strong> </p> <ul> <li>The enum names available in an enum type can have the same value. Let&apos;s look at the example.</li> </ul> <pre> #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf(&apos;The value of mango is %d&apos;, mango); printf(&apos;
The value of apple is %d&apos;, apple); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-4.webp" alt="Enum in C"> <ul> <li>If we do not provide any value to the enum names, then the compiler will automatically assign the default values to the enum names starting from 0.</li> <li>We can also provide the values to the enum name in any order, and the unassigned names will get the default value as the previous one plus one.</li> <li>The values assigned to the enum names must be integral constant, i.e., it should not be of other types such string, float, etc.</li> <li>All the enum names must be unique in their scope, i.e., if we define two enum having same scope, then these two enums should have different enum names otherwise compiler will throw an error.</li> </ul> <p> <strong>Let&apos;s understand this scenario through an example.</strong> </p> <pre> #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf(&apos;The value of success is %d&apos;, success); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-5.webp" alt="Enum in C"> <ul> <li>In enumeration, we can define an enumerated data type without the name also.</li> </ul> <pre> #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-6.webp" alt="Enum in C"> <h3>Enum vs. Macro in C</h3> <ul> <li>Macro can also be used to define the name constants, but in case of an enum, all the name constants can be grouped together in a single statement. <br> For example, <br> # define pass 0; <br> # define success 1; <br> The above two statements can be written in a single statement by using the enum type. <br> enum status{pass, success};</li> <li>The enum type follows the scope rules while macro does not follow the scope rules.</li> <li>In Enum, if we do not assign the values to the enum names, then the compiler will automatically assign the default value to the enum names. But, in the case of macro, the values need to be explicitly assigned.</li> <li>The type of enum in C is an integer, but the type of macro can be of any type.</li> </ul> <hr></=december;i++)>

Produktion

Enum i C

Några viktiga punkter relaterade till enum

  • Enum-namnen som finns tillgängliga i en enum-typ kan ha samma värde. Låt oss titta på exemplet.
 #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf(&apos;The value of mango is %d&apos;, mango); printf(&apos;
The value of apple is %d&apos;, apple); return 0; } 

Produktion

Enum i C
  • Om vi ​​inte tillhandahåller något värde till enum-namnen kommer kompilatorn automatiskt att tilldela standardvärdena till enum-namnen med start från 0.
  • Vi kan också tillhandahålla värdena till enumnamnet i valfri ordning, och de otilldelade namnen kommer att få standardvärdet som det föregående plus ett.
  • Värdena som tilldelas enumnamnen måste vara integralkonstant, d.v.s. de bör inte vara av andra typer såsom sträng, float, etc.
  • Alla enumnamn måste vara unika i sin omfattning, det vill säga om vi definierar två enum som har samma omfattning, bör dessa två enums ha olika enum-namn, annars kommer kompilatorn att ge ett fel.

Låt oss förstå detta scenario genom ett exempel.

 #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf(&apos;The value of success is %d&apos;, success); return 0; } 

Produktion

Enum i C
  • I uppräkning kan vi definiera en uppräknad datatyp utan namnet.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Produktion

Enum i C

Enum vs. Macro i C

  • Makro kan också användas för att definiera namnkonstanter, men i fallet med en uppräkning kan alla namnkonstanter grupperas tillsammans i en enda sats.
    Till exempel,
    # definiera pass 0;
    # definiera framgång 1;
    Ovanstående två påståenden kan skrivas i ett enda påstående genom att använda enum-typen.
    enum status{pass, framgång};
  • Enum-typen följer scope-reglerna medan makro inte följer scope-reglerna.
  • I Enum, om vi inte tilldelar värdena till enum-namnen, kommer kompilatorn automatiskt att tilldela standardvärdet till enum-namnen. Men när det gäller makro måste värdena tilldelas uttryckligen.
  • Typen av enum i C är ett heltal, men typen av makro kan vara av vilken typ som helst.