Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender o tipo enum e acessar membros
  2. Usar enum como parâmetro/argumento e retorno
  3. Usar enum como retorno
  4. Usar vetor/matriz de enum
  5. Passagem por valor e referência

O básico sobre tipo de dado enum foi visto em C Tipos de Dados: Enum.

Os assuntos vetor/matriz podem ser vistos em C: Vetor/Matriz e Funções. O uso de ponteiro para enum pode ser visto em Ponteiro para Enum.

O tipo enum ou enumerador que é composto de um ou mais constantes que são declaradas como seus membros. Se os membros não forem iniciados, os valor inteiros 0 a N - 1, serão associado de forma sequencial.

Se um membro for iniciado com valor, os membros seguintes sem terão seus valores baseados no membro anteriormente iniciado, sendo incrementando em 1. Os membros não precisam ter valores sequenciais.

A declaração de um enum e de uma variável do tipo enum são feita de acordo com as sintaxes abaixo:

Sintaxe
enum nome_enum
{
  MEMBRO1, //0 padrão
  MEMBRO2,
  MEMBRON //N
};

enum nome_enum
{
  MEMBRO1 = 10,
  MEMBRO2 = 100,
  MEMBRON = 25
};
enum nome_enum nome_variavel;
enum nome_enum nome_variavel = NOME_MEMBRO; 

Por serem constantes os membros de um enumerador, por boa práticas, seus nomes são declarados em caixa alta.

O acesso aos membros de um enum, diferente de unions e struct, é feito pelo seu próprio nome do membro:

Sintaxe
NOME_MEMBRO
Exemplo 1
#include <stdio.h>
enum cor
{
  NENHUM,  VERDE,  AMARELO,  AZUL,  BRANCO
};

int main ()
{
  enum cor cor_carro = BRANCO;
  printf("%d", cor_carro);
  
  return 0;}
Saída
4

O uso de enum como parâmetro de um função e a passagem como argumento é semelhante aos outros exemplos de outros tipos de dados vistos.

Sintaxe
tipo_retorno nome_funcao(enum nome_enum nome_param)
{
  //corpo
}
Exemplo 2
#include <stdio.h>
enum cor
{
  NENHUM, VERDE,  AMARELO,  AZUL,  BRANCO 
};

void funcao( enum cor param)
{
     printf("%d", param);
}

void main ()
{
  enum cor cor_carro = BRANCO;
  funcao(cor_carro);
}
Saída
4

Os conceitos de passagem por valor e por referência também são aplicados ao uso do tipo de dado enum usado como parâmetro.

O retorno do tipo de dado por uma função é feita da mesma forma utilizada como outros tipos de dados. Utilizamos a palavra reservada return seguido da uma variável do tipo enum.

Sintaxe
struct nome_struct nome_funcao(void)
{
  //corpo omitido
   return variavel_tipo_struct;
}
            
Exemplo 3
#include <stdio.h>
enum cor
{
  NENHUM,  VERDE,  AMARELO,  AZUL,  BRANCO
};

enum cor funcao(void)
{
    enum cor cor_carro = BRANCO;
    return cor_carro;
}

int main ()
{
  enum cor cor_carro = funcao();
  printf("%d", cor_carro);
  return 0;
}
            
Saída
4

O uso do tipo enum como matriz ou vetor é feito da mesma forma que outros tipos de dados. Definimos suas dimensões utilizando o indexador []. O acesso aos seus elementos é utilizando seus índices ou linha e colunas.

Sintaxe
enum nome_enum vetor[dimensao] = {valores};
enum nome_enum vetor[dimensao];
enum nome_enum matriz[linhas][colunas] = {valores};
enum nome_enum vetor[linhas][colunas];
Exemplo 4
#include <stdio.h>
enum cor
{
  NENHUM,  VERDE,  AMARELO,  AZUL,  BRANCO
};

int main ()
{
  enum cor vetor[4] = {VERDE,AMARELO,AZUL,BRANCO};
  printf("%d",vetor[0]);
  return 0;}
            
Saída
1

O assunto matriz e vetor podem ser vistos em Vetor e Matriz.

  1. 11/03/2025 - revisão 3 - Correções pontuais
  2. 07/10/2024 - revisão 2 - Ajustes pontuais
  3. 29/09/2023 - revisão 1 - Correção em referências, erros gramaticais, sintaxe e remoção de texto lixo
  4. 19/05/2023 - versão inicial