Programar em C/Enumeração

Origem: Wikilivros, livros abertos por um mundo aberto.
Esta página precisa ser reciclada (discuta).
Ao melhorá-la, você estará ajudando o Wikilivros.

Enumerations (enum)[editar | editar código-fonte]

Aqui vamos retornar a um tópico antigo.

Enumerations são um outro método de definir constantes. Recordam-se? Tínhamos o:

  1. #define
  2. const int a = 1;
  3. enumerations.


Criando um novo tipo de dados[editar | editar código-fonte]

As enumerations definem um novo tipo de variável e limita desde logo os valores.

 enum colors {black, blue, green, cyan, red, purple, yellow, white};

A maneira mais simples de interpretar uma enumeration é imagina-la como um vetor (matriz de apenas uma linha). Temos o nome da linha de temos as várias células na linha. Cada constante enumerada (muitas vezes chamado de enumerator) tem um valor inteiro (caso não seja especificado ele começa em zero)

Exemplo:

black blue green cyan purple yellow white
0 1 2 3 4 5 6



Mas podemos definir o valor tipo

 enum forma {quadrado=5, rectangulo,triangulo=27, circulo, elipse}

ficaríamos com a nossa linha do tipo:

Quadrado Rectângulo Triangulo Circulo Elipse
5 6 27 28 29

reparem nos valores dos números.

A vantagem em termos enumerações é que se uma variável é declarada tipo enumeração, tem um tipo único e os seus valores estão limitados e poderão ser verificados durante a compilação.

É tal como as estruturas criar tipos de variáveis.

 #include <stdio.h>
 /*Definindo o cabeçalho*/
   enum  cores
      {
        AZUL = 1,
        VERDE,
        BRANCO,
       };         /*Aqui um ponto virgula*/
 /*typedef transformamos 2 palavras em uma -> tipo_cores*/
 typedef enum cores tipo_cores ;


 /*A função default da lib ou glibc*/
 int main(void)
 {
    /*Agora usando o nosso novo tipo
     * Aqui sem typedef teríamos que colocar enum cores */

  tipo_cores cor = VERDE ;
  
     if(cor == 1)
          {
            printf("Cor azul \n");
          }

     if(cor == 2)
          {
            printf("Cor verde \n");
          }

      /* printf não será executado */
      if(cor == 3 )
          {
           printf("Cor branco \n");
          }
  return  0 ;
  /*De um enter depois de } para evitar warning */
 }

Aqui podemos ver um exemplo com uma função "mostrarRes()" e um switch:
Em este exemplo uma constante e definida e o valor das outra será definido automaticamente.

 #include <stdio.h>
 #include <stdlib.h>

void mostrarRes(int quem);

 /*Aqui os valores Italia = 4 e Brasil = 5 são incrementados automaticamente*/
 enum { ARGENTINA = 3, ITALIA, BRASIL };
 
 int main(void)
 {
 
  /*Colocamos 5  se você for Argentino coloque 3 */
    int n = BRASIL ;
    mostrarRes(n);
   
 }


void mostrarRes(int quem)
{
 
     switch(quem)
      {
        case BRASIL    : printf( "Brasil invencível como de costume\n" );
        break;
        case ARGENTINA : printf("Argentina um dia quem sabe\n")         ; 
        break;
        case ITALIA    : printf("Foi sorte\n")                          ;
        break;
        default : printf("Se estou vivo teve erro do sistema xx \n")    ;
         
     } 
       printf("The end , hasta la vista\n \n");
  /*De um enter depois de } para evitar warning */
}