Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Uma enumeração consiste em um conjunto de constantes inteiras nomeadas. Uma declaração de tipo de enumeração fornece o nome da marca de enumeração (opcional). E define o conjunto de identificadores inteiros nomeados (chamado de conjunto de enumeração, constantes de enumerador, enumeradores ou membros). Uma variável do tipo de enumeração armazena um dos valores do conjunto de enumeração definido por esse tipo.
Variáveis do enum tipo podem ser usadas em expressões de indexação e como operandos de todos os operadores aritméticos e relacionais. As enumerações fornecem uma alternativa à #define diretiva de pré-processador com as vantagens de que os valores podem ser gerados para você e obedecem às regras normais de escopo.
Em ANSI C, as expressões que definem o valor de uma constante de enumerador sempre têm int tipo. Isso significa que o armazenamento associado a uma variável de enumeração é o armazenamento necessário para um único int valor. Uma constante de enumeração ou um valor de tipo enumerado pode ser usado em qualquer lugar onde a linguagem C permita uma expressão inteira.
Sintaxe
enum-specifier:
enum
identifier
optar por{enumerator-list}
enum
identifier
enumerator-list:
enumerator
enumerator-list
,
enumerator
enumerator:
enumeration-constant
enumeration-constant
=
constant-expression
enumeration-constant:
identifier
O opcional identifier nomeia o tipo de enumeração definido por enumerator-list. Esse identificador é frequentemente chamado de "tag" da enumeração especificada pela lista. Um especificador de tipo declara identifier ser a tag da enumeração especificada pelo enumerator-list não-terminal, como visto aqui:
enum identifier
{
// enumerator-list
}
O enumerator-list define os membros do conjunto de enumeração.
Se a declaração de uma tag estiver visível, declarações posteriores que usam a tag mas omitem enumerator-list especificam o tipo enumerado declarado anteriormente. A marca deve se referir a um tipo de enumeração definido e esse tipo de enumeração deve estar no escopo atual. Como o tipo de enumeração é definido em outro lugar, o enumerator-list não aparece nesta declaração. Declarações de tipos derivados de enumerações e typedef declarações para tipos de enumeração podem usar a marca de enumeração antes que o tipo de enumeração seja definido.
Cada enumeration-constant um em um enumerator-list nomeia um valor do conjunto de enumeração. Por padrão, o primeiro enumeration-constant está associado ao valor 0. O próximo enumeration-constant na lista está associado ao valor de ( constant-expression + 1 ), a menos que você o associe explicitamente a outro valor. O nome de um enumeration-constant é equivalente ao seu valor.
Você pode usar enumeration-constant = constant-expression para substituir a sequência padrão de valores. Ou seja, se enumeration-constant = constant-expression aparece no enumerator-list, o enumeration-constant está associado ao valor dado por .constant-expression O constant-expression deve ter int tipo e pode ser negativo.
As seguintes regras se aplicam aos membros de um conjunto de enumeração:
Um conjunto de enumeração pode conter valores constantes duplicados. Por exemplo, você pode associar o valor 0 a dois identificadores diferentes, por exemplo, membros nomeados
nullezero, no mesmo conjunto.Os identificadores na lista de enumeração devem ser distintos de outros identificadores no mesmo escopo com a mesma visibilidade. Isso inclui nomes de variáveis comuns e identificadores em outras listas de enumeração.
As tags de enumeração obedecem às regras normais de escopo. Eles devem ser distintos de outras tags de enumeração, estrutura e união com a mesma visibilidade.
Exemplos
Estes exemplos ilustram declarações de enumeração:
enum DAY /* Defines an enumeration type */
{
saturday, /* Names day and declares a */
sunday = 0, /* variable named workday with */
monday, /* that type */
tuesday,
wednesday, /* wednesday is associated with 3 */
thursday,
friday
} workday;
O valor 0 está associado por saturday padrão. O identificador sunday é explicitamente definido como 0. Os identificadores restantes recebem os valores de 1 a 5 por padrão.
Neste exemplo, um valor do conjunto DAY é atribuído à variável today.
enum DAY today = wednesday;
O nome da constante de enumeração é usado para atribuir o valor. Como o DAY tipo de enumeração foi declarado anteriormente, somente a marca DAY de enumeração é necessária.
Para atribuir explicitamente um valor inteiro a uma variável de um tipo de dados enumerado, use uma conversão de tipo:
workday = ( enum DAY ) ( day_value - 1 );
Este elenco é recomendado em C, mas não é obrigatório.
enum BOOLEAN /* Declares an enumeration data type called BOOLEAN */
{
false, /* false = 0, true = 1 */
true
};
enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */
Esta declaração também pode ser especificada como
enum BOOLEAN { false, true } end_flag, match_flag;
ou como
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
Um exemplo que usa essas variáveis pode ter esta aparência:
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
Tipos de dados de enumerador sem nome também podem ser declarados. O nome do tipo de dados é omitido, mas as variáveis podem ser declaradas. A variável response é uma variável do tipo definido:
enum { yes, no } response;