Uma outra forma de tipo composto em C é a enumeração. Usualmente, faz parte do processo de desenvolvimento de um programa associar códigos númericos a variáveis que podem assumir um único valor dentre um conjunto finito de opções. O tipo enumeração permite associar nomes descritivos a tais conjuntos de valores numéricos.
Considere uma extensão da estrutura dados_pessoais apresentada acima que incorporasse também o sexo da pessoa. Há dois estados possíveis para uma variável deste tipo: ela pode assumir o valor masculino ou o valor feminino. Uma enumeração que poderia representar este tipo de informação seria
enum sex { masculino, feminino };
Uma variável deste tipo de enumeração poderia ser então incorporada na estrutura apresentada a seguir, dados_pessoais,
struct dados_pessoais { char nome[40]; struct data nascimento; enum sex genero; };
O seguinte trecho de programa ilustra como os nomes descritivos definidos em enumerações são utilizados como valores:
int calc_idade(struct dados_pessoais pessoa, struct data hoje) { int idade; idade = hoje.ano - pessoa.nascimento.ano; if (pessoa.genero == feminino) idade -= 10; return(idade); }
Internamente, o compilador designa o valor 0 para o primeiro símbolo da enumeração, e incrementa de um o valor associado a cada símbolo na seqüência. Isto pode ser modificado se o programador quiser através de atribuição explícita de um valor inteiro a um símbolo, como em
enum cedula { beijaflor = 1, garca = 5, arara = 10 };