logo

Enumeración en C

La enumeración en C también se conoce como tipo enumerado. Es un tipo de datos definido por el usuario que consta de valores enteros y proporciona nombres significativos a estos valores. El uso de enum en C hace que el programa sea fácil de entender y mantener. La enumeración se define utilizando la palabra clave enum.

La siguiente es la forma de definir la enumeración en C:

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

En la declaración anterior, definimos la enumeración nombrada como un indicador que contiene 'N' constantes enteras. El valor predeterminado de integer_const1 es 0, integer_const2 es 1, y así sucesivamente. También podemos cambiar el valor predeterminado de las constantes enteras en el momento de la declaración.

Por ejemplo:

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

El valor predeterminado de mango es 0, manzana es 1, fresa es 2 y papaya es 3. Si queremos cambiar estos valores predeterminados, podemos hacer lo que se indica a continuación:

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

Declaración de tipo enumerado

Como sabemos, en lenguaje C, necesitamos declarar la variable de un tipo predefinido como int, float, char, etc. De manera similar, podemos declarar la variable de un tipo de datos definido por el usuario, como enum. Veamos cómo podemos declarar la variable de un tipo enum.

Supongamos que creamos la enumeración de tipo status como se muestra a continuación:

 enum status{false,true}; 

Ahora creamos la variable de tipo estado:

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

En la declaración anterior, hemos declarado la variable 's' de tipo estado.

Para crear una variable, las dos declaraciones anteriores se pueden escribir como:

 enum status{false,true} s; 

En este caso, el valor predeterminado de falso será igual a 0 y el valor de verdadero será igual a 1.

Creemos un programa simple de enumeración.

 #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; } 

En el código anterior, creamos un tipo de enumeración denominado días de la semana y contiene el nombre de los siete días. Hemos asignado 1 valor al domingo y a todos los demás nombres se les asignará un valor como el valor anterior más uno.

Producción

Enumeración en C

Demostremos otro ejemplo para comprender la enumeración más claramente.

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

Producción

Enumeración en C

Algunos puntos importantes relacionados con la enumeración.

  • Los nombres de enumeración disponibles en un tipo de enumeración pueden tener el mismo valor. Veamos el ejemplo.
 #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; } 

Producción

Enumeración en C
  • Si no proporcionamos ningún valor a los nombres de enumeración, el compilador asignará automáticamente los valores predeterminados a los nombres de enumeración comenzando desde 0.
  • También podemos proporcionar los valores al nombre de enumeración en cualquier orden, y los nombres no asignados obtendrán el valor predeterminado como el anterior más uno.
  • Los valores asignados a los nombres de enumeración deben ser constantes integrales, es decir, no deben ser de otros tipos como cadena, flotante, etc.
  • Todos los nombres de enumeraciones deben ser únicos en su alcance, es decir, si definimos dos enumeraciones que tienen el mismo alcance, entonces estas dos enumeraciones deben tener nombres de enumeraciones diferentes; de lo contrario, el compilador arrojará un error.

Entendamos este escenario a través de un ejemplo.

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

Producción

Enumeración en C
  • En la enumeración, también podemos definir un tipo de datos enumerados sin el nombre.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Producción

Enumeración en C

Enum frente a macro en C

  • La macro también se puede utilizar para definir las constantes de nombre, pero en el caso de una enumeración, todas las constantes de nombre se pueden agrupar en una sola declaración.
    Por ejemplo,
    # definir pase 0;
    # definir el éxito 1;
    Las dos declaraciones anteriores se pueden escribir en una sola declaración utilizando el tipo enum.
    estado de enumeración {aprobado, exitoso};
  • El tipo de enumeración sigue las reglas de alcance, mientras que la macro no sigue las reglas de alcance.
  • En Enum, si no asignamos los valores a los nombres de enumeración, el compilador asignará automáticamente el valor predeterminado a los nombres de enumeración. Pero, en el caso de la macro, los valores deben asignarse explícitamente.
  • El tipo de enumeración en C es un número entero, pero el tipo de macro puede ser de cualquier tipo.