Declaraciones de enumeración de C
Una enumeración consta de un conjunto de constantes enteras con nombre.Una declaración de tipos de enumeración proporciona el nombre de la etiqueta (opcional) de enumeración y define el conjunto de identificadores enteros denominados (denominado “conjunto de enumeración”, “las constantes de enumerador”, “los enumeradores,” o “miembros”).Una variable con el tipo de enumeración almacena uno de los valores de definido determinado de la enumeración de ese tipo.
Las variables de tipo de enum se pueden usar en expresiones de indización y como operandos de toda la aritmética y operadores relacionales.Las enumeraciones proporcionan una alternativa a la directiva de preprocesador de #define con las ventajas que los valores pueden ser generados automáticamente y seguir reglas habituales de ámbito.
En ANSI C, expresiones que definen el valor de una constante de enumerador siempre tienen el tipo de int ; así, el almacenamiento asociado a una variable de enumeración es el almacenamiento requerido por un único valor de int .Una constante de enumeración o un valor de tipo enumerado se puede utilizar en cualquier parte el lenguaje C permite una expresión de tipo entero.
Sintaxis
enum-especificador:
enumerador-lista }de{ IDoptdeenumeraciónidentificador deenumeración
Los nombres opcionales del identificador del tipo de enumeración definido por la enumerador-lista.Este identificador se suele denominar la “etiqueta” de la enumeración especificada por la lista.Un especificador de tipo de formulario
enum identifier { enumerator-list }
declara el identificador para ser la etiqueta de la enumeración especificada por la enumerador- lista no terminal.La enumerador-lista define el “contenido de enumerador”. La enumerador-lista se describe en detalle a continuación.
Si la declaración de una etiqueta es visible, las declaraciones subsiguientes que utilizan la etiqueta pero omite la enumerador-lista especifican el tipo enumerado declarado previamente.La etiqueta debe hacer referencia a un tipo de enumeración definido, y ese tipo de enumeración debe estar en el ámbito actual.Puesto que el tipo de enumeración está definido en otra parte, la enumerador-lista no aparece en esta declaración.Las declaraciones de tipos derivados de enumeraciones y las declaraciones de typedef para los tipos de enumeración pueden utilizar la etiqueta de la enumeración antes de que el tipo de enumeración está definido.
Sintaxis
enumerador-lista:
enumeradorenumerador-lista**,** enumerator
enumerator:
enumeración-constanteexpresión constante de**=** de la enumeración-constante
enumeración-constante:
identifier
Cada enumeración-constante en nombres de una enumeración-lista un valor del conjunto de la enumeración.de forma predeterminada, la primera enumeración- constante es asociado con el valor 0.La enumeración-constante siguiente en la lista está asociada al valor de (expresión constante + 1), a menos que explícitamente asociarlo a otro valor.El nombre de una enumeración-constante equivale a su valor.
Puede utilizar la enumeración-constante = la expresión constante para reemplazar la secuencia predeterminada de valores.Así, si la enumeración-constante = la expresión constante aparece en la enumerador-lista, la enumeración-constante es asociado con el valor especificado por la expresión constante.La expresión constante debe tener int escrito y puede ser negativo.
Las reglas siguientes se aplican a los miembros de una enumeración establecida:
Un conjunto de enumeración puede contener valores constantes duplicados.Por ejemplo, puede asociar el valor 0 con dos diferentes identificadores, quizás denominado null y zero, en el mismo conjunto.
Los identificadores de la lista de enumeración deben ser distintos de otros identificadores en el mismo ámbito con la misma visibilidad, como nombres de variable normales e identificadores de otras listas de enumeración.
Las etiquetas de la enumeración siguen las reglas habituales de ámbito.Deben ser distintos de otra enumeración, estructura, y etiquetas de la combinación con la misma visibilidad.
Ejemplos
Estos ejemplos muestran declaraciones de enumeración:
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;
El valor 0 es asociado a saturday de forma predeterminada.El identificador sunday está establecido explícitamente en 0.Los identificadores restantes se proporcionan los valores 1 a 5 de forma predeterminada.
En este ejemplo, un valor del conjunto DAY se asigna a todayvariable.
enum DAY today = wednesday;
Observe que el nombre de la constante de enumeración se utiliza para asignar el valor.Desde que el tipo de enumeración de DAY se declaró previamente, solo la etiqueta DAY de enumeración es necesaria.
Para asignar explícitamente un valor entero a una variable de un tipo de datos enumerado, utilice una conversión de tipo:
workday = ( enum DAY ) ( day_value - 1 );
Esta conversión se recomienda en C pero no se requiere.
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 declaración también se puede especificar como
enum BOOLEAN { false, true } end_flag, match_flag;\
o como
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
Un ejemplo que utiliza estas variables sería similar a:
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
Los tipos de datos sin nombre de enumerador también pueden declararse.El nombre del tipo de datos se omite, pero las variables se pueden declarar.response variable es una variable de tipo definido:
enum { yes, no } response;