Explicación detallada del tipo de enumeración del lenguaje C y de las variables de enumeración. función de enumeración

definición de enumeración

Palabra clave: enum
Propósito: Definir una variable entera con un valor restringido, utilizada para limitar el rango de valores de la variable; una colección de definiciones macro para definir
variables de enumeración:
enum{FALSE = 0, TRUE = 1} EnumName;
debido a la variable de enumeración The El tipo es largo, por lo que typedef generalmente se usa para cambiar el nombre del tipo de variable
para hacer referencia al miembro de la enumeración:
EnumName = FALSE;
EnumName = TRUE;

Enumerar aplicaciones

Enlace original: https://blog.csdn.net/yetaodiao/article/details/127372017

enum es una palabra clave en el lenguaje C. enum se denomina tipo de datos de enumeración. El tipo de datos de enumeración describe un conjunto de valores enteros (esta oración en realidad no es apropiada). El tipo de enumeración es la instrucción de preprocesamiento #define Reemplazo, enumeraciones Y las macros son en realidad muy similares: las macros reemplazan los nombres con los valores correspondientes en la etapa de preprocesamiento y las enumeraciones reemplazan los nombres con los valores correspondientes en la etapa de compilación.

Podemos entender las enumeraciones como macros en la fase de compilación, usando el formato:

enum typeName{
    
     valueName1, valueName2, valueName3, ...... };

es el nombre del tipo de enumeración. Los elementos (miembros de la enumeración) dentro de las llaves son constantes en lugar de variables. Esto debe aclararse. Debido a que los miembros de la enumeración son constantes, no se les pueden asignar valores. Solo se les pueden asignar sus valores. Para otras variables,

cuando el tipo de enumeración y la variable de enumeración se definen juntos, se puede omitir el nombre del tipo de enumeración (es decir, la semana en la semana de enumeración), lo que significa que hay dos formas de escribir la imagen de arriba. el primero
  :

enum week{
    
    Mon=1, Tues, Wed, Thurs}num;

El segundo tipo:

enum {
    
    Mon=1, Tues, Wed, Thurs}num;

En realidad, esto es muy similar a la estructura sin nombre en la estructura. Aunque la definición de variables de tipo de enumeración y la definición de variables de tipo de estructura parecen muy similares, la diferencia entre las dos es bastante grande. Una variable de tipo de estructura contiene varios miembros. Equivalente a una caja exprés empaquetada ,

Las variables de tipo de enumeración son diferentes. Las variables de tipo de enumeración no son un conjunto que contenga varios miembros. Las variables de tipo de enumeración son en realidad similares a las variables de tipo int y char. Sin embargo, la asignación de variables de tipo de enumeración solo puede usar su propia Para asignar valores a los miembros de la enumeración, tomando el ejemplo anterior,

La asignación de num solo puede utilizar los miembros de enumeración lunes, martes, miércoles y jueves, pero no los miembros de enumeración de otros tipos de enumeración.

Definir variables de enumeración es lo mismo que definir variables de estructura: existen dos métodos de definición.

El primer tipo: (defina las variables de enumeración mientras define el tipo de enumeración)

enum week{
    
    Mon=1, Tues, Wed, Thurs}num;

El segundo tipo: (primero defina el tipo de enumeración y luego defina la variable de enumeración)

enum week{
    
    Mon=1, Tues, Wed, Thurs};
  enum week num;

Se utilizarán diferentes ejemplos para ilustrar las características de los tipos de enumeración a continuación.

Ejemplo 1: (No indique explícitamente el valor de la constante de enumeración)

enumeración semana {lunes, martes, miércoles, jueves, viernes, sábado, domingo};

Sin instrucciones explícitas, constantes de enumeración (es decir, nombres de constantes entre llaves)El valor predeterminado de la primera constante de enumeración es 0, cada constante de enumeración se incrementa en 1 a su vez, por lo que lunes = 0, martes = 1, ・・・・dom = 6, verifiquémoslo a continuación

enum week{
    
    Mon, Tues, Wed, Thurs, Fri, Sat, Sun};

  printf("Mon=%d

  Tues=%d

  Wed=%d

  Thurs=%d

  Fri=%d

  Sat=%d

  Sun=%d

  ", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

resultado de la operación:
  Insertar descripción de la imagen aquí

——————————————
Declaración de derechos de autor: este artículo es un artículo original del blogger de CSDN "Ye Tao Website Promotion Optimization" y sigue el acuerdo de derechos de autor CC 4.0 BY-SA. Adjunte la fuente original para Reimpresión de enlaces y esta declaración.

Ejemplo 2: (Muestra el valor de la constante de enumeración en la descripción)

enum week{
    
    Mon=1, Tues, Wed, Thurs, Fri, Sat, Sun};

En el código anterior, solo se indica explícitamente que el valor de la constante de enumeración Mon es 1, y el valor del nombre de enumeración no especificado aumentará secuencialmente de acuerdo con el último valor especificado (tenga en cuenta que es el último valor especificado)

enum week{
    
    Mon=1, Tues, Wed, Thurs, Fri, Sat, Sun};

  printf("Mon=%d

  Tues=%d

  Wed=%d

  Thurs=%d

  Fri=%d

  Sat=%d

  Sun=%d

  ", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

resultado de la operación:

Insertar descripción de la imagen aquí

Modifique ligeramente el código anterior.

enum week{
    
    Mon=1, Tues, Wed, Thurs, Fri=10, Sat, Sun};
  printf("Mon=%d

  Tues=%d

  Wed=%d

  Thurs=%d

  Fri=%d

  Sat=%d

  Sun=%d
  ", Mon, Tues, Wed, Thurs, Fri, Sat, Sun);

resultado de la operación:
Insertar descripción de la imagen aquí

Ejemplo 3: (Asignación de valores a variables de enumeración)

enumeración semana{lun=1, martes, miércoles, jueves}num;

num =(enumeración semana)10;

printf(“%d”, número);

No se puede asignar un número entero a una variable de enumeración. El tipo de enumeración al que pertenece la variable de enumeración debe usarse para la coerción de tipo antes de la asignación. En el código anterior, la conversión del tipo de coerción realizada al asignar un valor de 10 a la variable de enumeración cambiará el valor completo. La constante de tipo 10 se convierte en el tipo de semana de enumeración y luego se asigna a la variable num.

resultado de la operación:

Insertar descripción de la imagen aquí

Resumir:

1. En ausencia de instrucciones de visualización, el valor predeterminado de la constante de enumeración (es decir, el nombre de la constante entre llaves) es 0 para la primera constante de enumeración, y cada constante de enumeración posterior se incrementa en 1.

2. En el caso de instrucciones de visualización parcial, el valor del nombre de enumeración no especificado se incrementará secuencialmente según el último valor especificado.

3. No se puede asignar un número entero a una variable de enumeración. El tipo de enumeración al que pertenece la variable de enumeración debe usarse para la coerción de tipo antes de asignar un valor.

4. Diferentes miembros de enumeración en el mismo tipo de enumeración pueden tener el mismo valor.

5. Los tipos de enumeración con el mismo nombre no se pueden definir en el mismo programa y los miembros de enumeración (constantes de enumeración) con el mismo nombre no pueden existir en diferentes tipos de enumeración.

typedef enumeración semana mi;

o

typedef enum semana{lun=1, martes, miércoles, jueves}mi;

El typedef anterior también puede omitir la semana.

typedef enum{lun=1, martes, miércoles, jueves}mi;

En las dos formas anteriores, my es un alias de enumweek (lo que significa que my y enumweek son equivalentes). Cabe señalar que si se elimina el typedef en la segunda oración, my se convertirá en una variable del tipo enumweek. agregas Si vas a typedef, entonces my es el alias de enum, debes prestar atención para distinguir este punto.

Después de definir el alias my de la semana de enumeración, puede usar my para definir variables de tipo de enumeración más adelante.

mi número;

num =(enumeración semana)10;

printf(“%d”, número);

función de enumeración

enum eMovePriorityLevel {
    
    

eMovePriorityLevel_cant_move_unknown,

eMovePriorityLevel_cant_move_by_win, ///< 不能移动-已经胜利

eMovePriorityLevel_wall, ///< 不能移动-遇到了墙

eMovePriorityLevel_cant_move_by_go_twice, ///< 不能移动-已经走了2次

eMovePriorityLevel_can_move_by_go_once, ///< 可以移动-已经走了一次

eMovePriorityLevel_can_move_by_door, ///< 可以移动-是门, 从来没走过

};

使用枚举值类型的函数定义

enum eMovePriorityLevel GetMovePriorityLevel(char cPos)

使用枚举值类型的函数实现

enum eMovePriorityLevel GetMovePriorityLevel(char cPos)

{
    
    

enum eMovePriorityLevel Level;

switch (cPos)

{
    
    

case CHAR_WALL:

Level = eMovePriorityLevel_wall;

break;

case CHAR_DOOR:

Level = eMovePriorityLevel_can_move_by_door;

break;

case CHAR_EXIT:

Level = eMovePriorityLevel_cant_

Función de enumeración 2

enum ICMDeviceType El nombre del tipo de enumeración,
variable de enumeración Icmdevtype
Función de enumeración Get_SensorType()

1enum ICMDeviceType Icmdevtype = NOS;
2enum ICMDeviceType
{
    
    
     NOS=0, ICM20602, ICM42688, Adis16470,adis16800//枚举成员
};

3enum ICMDeviceType Get_SensorType()
{
    
    
    uint8_t whoami=0;
    read_1B( MPUREG_WHO_AM_I, &whoami );//读取ID,IIC,指针,形参地址
    if( whoami == 0x12 )
    {
    
    
        Icmdevtype = ICM20602;
    }
    enum ICMDeviceType Query_SensorType()
{
    
    
    return Icmdevtype;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44057803/article/details/132595743
Recomendado
Clasificación