O enum em C também é conhecido como tipo enumerado. É um tipo de dados definido pelo usuário que consiste em valores inteiros e fornece nomes significativos para esses valores. O uso de enum em C torna o programa fácil de entender e manter. O enum é definido usando a palavra-chave enum.
A seguir está a maneira de definir o enum em C:
enum flag{integer_const1, integer_const2,.....integter_constN};
Na declaração acima, definimos o enum nomeado como sinalizador contendo 'N' constantes inteiras. O valor padrão de inteiro_const1 é 0, inteiro_const2 é 1 e assim por diante. Também podemos alterar o valor padrão das constantes inteiras no momento da declaração.
Por exemplo:
enum fruits{mango, apple, strawberry, papaya};
O valor padrão de manga é 0, maçã é 1, morango é 2 e mamão é 3. Se quisermos alterar esses valores padrão, podemos fazer conforme indicado abaixo:
enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, };
Declaração de tipo enumerado
Como sabemos que na linguagem C, precisamos declarar a variável de um tipo predefinido como int, float, char, etc. Da mesma forma, podemos declarar a variável de um tipo de dados definido pelo usuário, como enum. Vamos ver como podemos declarar a variável de um tipo enum.
Suponha que criemos o enum do tipo status conforme mostrado abaixo:
enum status{false,true};
Agora, criamos a variável do tipo status:
enum status s; // creating a variable of the status type.
Na instrução acima, declaramos a variável 's' do tipo status.
Para criar uma variável, as duas instruções acima podem ser escritas como:
enum status{false,true} s;
Neste caso, o valor padrão de false será igual a 0 e o valor de true será igual a 1.
Vamos criar um programa simples de 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; }
No código acima, criamos um tipo enum denominado dias da semana e contém o nome de todos os sete dias. Atribuímos 1 valor ao domingo, e todos os outros nomes receberão um valor igual ao valor anterior mais um.
Saída
Vamos demonstrar outro exemplo para entender o enum com mais clareza.
#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 '1' 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 'i' 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'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('Today is sunday'); break; case monday: printf('Today is monday'); break; case tuesday: printf('Today is tuesday'); break; case wednesday: printf('Today is wednesday'); break; case thursday: printf('Today is thursday'); break; case friday: printf('Today is friday'); break; case saturday: printf('Today is saturday'); 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's look at the example.</li> </ul> <pre> #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf('The value of mango is %d', mango); printf(' The value of apple is %d', 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's understand this scenario through an example.</strong> </p> <pre> #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', 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('The value of status is %d', 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++)>
Saída
Alguns pontos importantes relacionados ao enum
- Os nomes de enum disponíveis em um tipo de enum podem ter o mesmo valor. Vejamos o exemplo.
#include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf('The value of mango is %d', mango); printf(' The value of apple is %d', apple); return 0; }
Saída
- Se não fornecermos nenhum valor aos nomes de enum, o compilador atribuirá automaticamente os valores padrão aos nomes de enum começando em 0.
- Também podemos fornecer os valores para o nome da enumeração em qualquer ordem, e os nomes não atribuídos obterão o valor padrão do anterior mais um.
- Os valores atribuídos aos nomes dos enums devem ser constantes integrais, ou seja, não devem ser de outros tipos, como string, float, etc.
- Todos os nomes de enum devem ser únicos em seu escopo, ou seja, se definirmos dois enums com o mesmo escopo, então esses dois enums deverão ter nomes de enum diferentes, caso contrário o compilador gerará um erro.
Vamos entender esse cenário através de um exemplo.
#include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; }
Saída
- Na enumeração, também podemos definir um tipo de dados enumerado sem o nome.
#include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; }
Saída
Enum vs. Macro em C
- A macro também pode ser usada para definir as constantes de nome, mas no caso de um enum, todas as constantes de nome podem ser agrupadas em uma única instrução.
Por exemplo,
# define a passagem 0;
# define o sucesso 1;
As duas instruções acima podem ser escritas em uma única instrução usando o tipo enum.
enum status{pass, sucesso}; - O tipo enum segue as regras de escopo enquanto a macro não segue as regras de escopo.
- No Enum, se não atribuirmos os valores aos nomes dos enums, o compilador atribuirá automaticamente o valor padrão aos nomes dos enums. Mas, no caso da macro, os valores precisam ser atribuídos explicitamente.
- O tipo de enum em C é um número inteiro, mas o tipo de macro pode ser de qualquer tipo.
=december;i++)>