Dominando Enums em C: Definição, Declaração e Operações de Flags
Enums em C
Explore como definir, declarar e utilizar enums em C—com exemplos práticos, técnicas de flags e insights sobre tamanho.
Em C, uma enumeração (enum) é um tipo que agrupa um conjunto de constantes integrais nomeadas, oferecendo intenção mais clara e segurança de tipo em tempo de compilação.
enum flag {const1, const2, ..., constN}; Por padrão, const1 é 0, const2 é 1, e assim por diante. Você pode sobrescrever esses valores na declaração se necessário.
// Personalizando constantes do enum enum naipe { paus = 0, ouros = 10, copas = 20, espadas = 3, }; Declaração de tipo enumerado
Definir um enum cria um novo tipo que pode ser usado para variáveis. Veja como declarar e instanciar um.
enum booleano {falso, verdadeiro}; enum booleano verifica; // declaração de variável A variável verifica é agora do tipo enum booleano. Seus valores mapeiam para falso = 0 e verdadeiro = 1.
enum booleano {falso, verdadeiro} verifica; Exemplo: Enumeração de dias da semana
#include <stdio.h> enum semana {Domingo, Segunda, Terca, Quarta, Quinta, Sexta, Sabado}; int main() { enum semana hoje = Quarta; printf("Dia %d", hoje + 1); return 0; } Saída
Dia 4
Por que usar Enums?
Variáveis enum armazenam um único valor nomeado, tornando o código auto-documentado. Elas também ocupam o mesmo armazenamento que um int por padrão, tipicamente 4 bytes na maioria das plataformas.
#include <stdio.h> enum naipe {paus = 0, ouros = 10, copas = 20, espadas = 3} carta; int main() { carta = paus; printf("Tamanho da variável enum = %d bytes", sizeof(carta)); return 0; } Saída
Tamanho da variável enum = 4 bytes
Este tamanho é consistente com o tipo int subjacente, embora o tamanho exato possa variar por compilador e arquitetura.
Usando Enums para Flags
Enums se destacam na representação de flags quando cada constante é uma potência distinta de dois. Isso permite combinar flags com OR bitwise e testá-las com AND bitwise.
#include <stdio.h> enum flagsDesign {ITALICO = 1, NEGRITO = 2, SUBLINHADO = 4} botao; Como os valores são potências de dois:
// Representação binária ITALICO = 00000001 NEGRITO = 00000010 SUBLINHADO = 00000100
Você pode combiná-los:
#include <stdio.h> enum flagsDesign {NEGRITO = 1, ITALICO = 2, SUBLINHADO = 4}; int main() { int meuDesign = NEGRITO | SUBLINHADO; // 00000001 | 00000100 = 00000101 printf("%d", meuDesign); return 0; } Saída
5
Uma saída de 5 indica que tanto NEGRITO quanto SUBLINHADO estão ativos.
Para verificar uma flag específica:
if (meuDesign & ITALICO) { // trata itálico } Embora você possa alcançar muitos resultados sem enums, eles fornecem uma maneira robusta e type-safe de gerenciar constantes relacionadas—especialmente para operações de flags.
Linguagem C
- C# Hello World – Criando Sua Primeira Aplicação C#
- Entendendo Palavras-chave e Identificadores em C#: Regras, Listas e Boas Práticas
- Domine Variáveis e Tipos de Dados Primitivos em C#: Guia Completo
- Operadores em C# – Guia Completo dos Operadores em C#
- Dominando Operadores Bitwise e Bit Shift em C#: Guia Abrangente
- Fundamentos de C#: Essenciais de Entrada e Saída
- Expressões, Instruções e Blocos em C#: Guia Completo com Exemplos Práticos
- Dominando Comentários em C#: Tipos, Boas Práticas e Documentação XML
- Dominando a Instrução Switch em C#: Sintaxe, Exemplos e Boas Práticas
- Operador Ternário em C#: Guia Conciso para Expressões Condicionais