logo

Enumeració en C

L'enum en C també es coneix com el tipus enumerat. És un tipus de dades definit per l'usuari que consta de valors enters i proporciona noms significatius a aquests valors. L'ús d'enum en C fa que el programa sigui fàcil d'entendre i mantenir. L'enum es defineix mitjançant la paraula clau enum.

La següent és la manera de definir l'enumeració en C:

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

A la declaració anterior, definim l'enumeració anomenada com a bandera que conté 'N' constants senceres. El valor per defecte de integer_const1 és 0, integer_const2 és 1, i així successivament. També podem canviar el valor per defecte de les constants senceres en el moment de la declaració.

Per exemple:

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

El valor predeterminat de mango és 0, poma és 1, maduixa és 2 i papaia és 3. Si volem canviar aquests valors per defecte, podem fer el següent:

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

Declaració de tipus enumerada

Com sabem que en llenguatge C, hem de declarar la variable d'un tipus predefinit com int, float, char, etc. De la mateixa manera, podem declarar la variable d'un tipus de dades definit per l'usuari, com ara enum. Vegem com podem declarar la variable d'un tipus d'enum.

Suposem que creem l'enumeració de l'estat del tipus tal com es mostra a continuació:

 enum status{false,true}; 

Ara, creem la variable de tipus d'estat:

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

A la declaració anterior, hem declarat la variable 's' d'estat de tipus.

Per crear una variable, les dues declaracions anteriors es poden escriure com:

 enum status{false,true} s; 

En aquest cas, el valor per defecte de fals serà igual a 0 i el valor de true serà igual a 1.

Creem un programa senzill d'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; } 

Al codi anterior, creem un tipus d'enumeració anomenat dies laborables i conté el nom de tots els set dies. Hem assignat 1 valor al diumenge i tots els altres noms rebran un valor com el valor anterior més un.

Sortida

Enumeració en C

Mostrem un altre exemple per entendre l'enum més clarament.

 #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++)>

Sortida

Enumeració en C

Alguns punts importants relacionats amb l'enum

  • Els noms d'enumeració disponibles en un tipus d'enumeració poden tenir el mateix valor. Vegem l'exemple.
 #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; } 

Sortida

Enumeració en C
  • Si no proporcionem cap valor als noms d'enumeració, el compilador assignarà automàticament els valors per defecte als noms d'enumeració a partir de 0.
  • També podem proporcionar els valors al nom d'enumeració en qualsevol ordre, i els noms no assignats obtindran el valor predeterminat com l'anterior més un.
  • Els valors assignats als noms d'enumeració han de ser constants integrals, és a dir, no haurien de ser d'altres tipus com string, float, etc.
  • Tots els noms d'enumeració han de ser únics en el seu abast, és a dir, si definim dues enumeracions amb el mateix abast, aquestes dues enumeracions haurien de tenir noms d'enumeració diferents, en cas contrari, el compilador generarà un error.

Entenem aquest escenari a través d'un exemple.

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

Sortida

Enumeració en C
  • En l'enumeració, podem definir un tipus de dades enumerades sense el nom també.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Sortida

Enumeració en C

Enum vs. Macro en C

  • La macro també es pot utilitzar per definir les constants de nom, però en el cas d'una enumeració, totes les constants de nom es poden agrupar en una sola instrucció.
    Per exemple,
    # defineix la passada 0;
    # definir l'èxit 1;
    Les dues declaracions anteriors es poden escriure en una sola sentència utilitzant el tipus enum.
    estat de enumeració{pass, èxit};
  • El tipus d'enum segueix les regles d'abast mentre que la macro no segueix les regles d'abast.
  • A Enum, si no assignem els valors als noms d'enumeració, el compilador assignarà automàticament el valor predeterminat als noms d'enumeració. Però, en el cas de macro, els valors s'han d'assignar explícitament.
  • El tipus d'enum en C és un nombre enter, però el tipus de macro pot ser de qualsevol tipus.