Com s'utilitza enum en llenguatge C.

How Use Enum C Language



El programa enum del llenguatge de programació C s’utilitza per definir valors constants integrals, cosa que és molt útil per escriure programes nets i llegibles. Els programadors normalment utilitzen l'enumeració per definir constants integrals anomenades en els seus programes per proporcionar una millor llegibilitat i mantenibilitat del programari. En aquest article es tractarà detalladament l'enum.

Sintaxi

enum <Nom del tipus Enum> {
Enumeració_Constant_Element-1,
Enumeració_Constant_Element-2,
Enumeració_Constant_Element-3,
...... .........,
Enumeració_Constant_Element-n,
};

El valor per defecte d'Enumeration_Constant_Element-1 és 0, el valor d'Enumeration_Constant_Element-2 és 1, el valor d'Enumeration_Constant_Element-3 és 2 i el valor d'Enumeration_Constant_Element-n és (n-1).







Submarinisme profund a Enum

Ara, ja que coneixem la sintaxi per definir el tipus d’enumeració, vegem un exemple:



enumerror{
IO_ERROR,
DISK_ERROR,
ERROR DE CONNEXIÓ
};

La paraula clau enum sempre s’ha d’utilitzar per definir el tipus d’enumeració. Per tant, sempre que vulgueu definir un tipus d’enumeració, heu d’utilitzar la paraula clau enum abans. Després de la paraula clau enum, heu d'utilitzar un identificador vàlid per definir el fitxer.



A l'exemple anterior, el compilador assignarà IO_ERROR al valor integral: 0, DISK_ERROR al valor integral: 1 i NETWORK_ERROR al valor integral: 2. Per defecte, al primer element enum sempre se li assigna el valor 0, al següent a enum-element se li assigna el valor 1, etc.





Aquest comportament per defecte es pot canviar si cal assignant explícitament el valor integral constant, de la manera següent:

enumerror{
IO_ERROR= 2,
DISK_ERROR,
ERROR DE CONNEXIÓ= 8 ,
PRINT_ERROR
};

En aquest cas, el programador assigna explícitament IO_ERROR a un valor de 2, el compilador assigna DISK_ERROR a un valor de 3, el programador assigna explícitament NETWORK_ERROR al valor 8 i PRINT_ERROR s’assigna al següent valor integral de l'element enum anterior NETWORK_ERROR (és a dir, 9) pel compilador.



Per tant, ara enteneu com definir un tipus d’enumeració definit per l’usuari a C. És possible declarar una variable de tipus enum (ja que podem declarar una variable de tipus enter)? Sí, ho és! Podeu declarar la variable enum de la següent manera:

enumerror Hw_Error;

De nou, enum és la paraula clau aquí, Error és el tipus enum i Hw_Error és una variable enum.

Ara veurem els exemples següents per comprendre els diversos usos de enum:

  • Exemple 1: ús de la definició d'enum per defecte
  • Exemple 2: ús de definició d'enum personalitzat
  • Exemple 3: definició d'enum mitjançant expressió constant
  • Exemple 4: abast d'enum

Exemple 1: ús per defecte de la definició de l’enumeració

En aquest exemple, aprendreu a definir el tipus d’enumeració amb valors constants per defecte. El compilador s'encarregarà d'assignar els valors per defecte als elements enum. A continuació, veureu l'exemple de programa i la sortida corresponent.

#incloure

/ * Definiu el tipus d'enum * /
enumerror{
IO_ERROR,
DISK_ERROR,
ERROR DE CONNEXIÓ
};

intprincipal()
{
enumerror Hw_Error; / * Creació de la variable enum * /

printf ('Configurant Hw_Error a IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a NETWORK_ERROR n');
Hw_Error=ERROR DE CONNEXIÓ;
printf ('Valor de Hw_Error =% d n',Hw_Error);

tornar 0;
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBVoiMOHPzXeyxqQnCVf4hz0D4AJ-mPRJWjhIGA

Exemple 2: ús de la definició d’enum personalitzat

En aquest exemple, aprendreu a definir el tipus d’enumeració amb un valor de costum personalitzat. A més, aquest exemple us ajudarà a entendre com es pot fer la inicialització de constants personalitzades en qualsevol ordre aleatori. En aquest exemple, hem definit explícitament el valor constant de l’1ci 3rdelements enum (és a dir, IO_ERROR i NETWORK_ERROR, respectivament), però hem saltat la inicialització explícita per a la 2ndi 4thelements. Ara és responsabilitat del compilador assignar els valors per defecte al 2ndi 4thelements enum (és a dir, DISK_ERROR i PRINT_ERROR, respectivament). DISK_ERROR s'assignarà a un valor de 3 i PRINT_ERROR s'assignarà a un valor de 9. A continuació, veureu l'exemple de programa i la sortida.

#incloure

/ * Definiu el tipus d'enum: inicialització personalitzada * /
enumerror{
IO_ERROR= 2,
DISK_ERROR,
ERROR DE CONNEXIÓ= 8,
PRINT_ERROR
};

intprincipal()
{

/ * Declara variable enum * /
enumerror Hw_Error;

printf ('Configurant Hw_Error a IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a NETWORK_ERROR n');
Hw_Error=ERROR DE CONNEXIÓ;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

tornar 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLy6hsv9F-FwKl2EnUjzx0af4UwDK0agfEVv0rA

Exemple 3: definició d'enum mitjançant expressió constant

En aquest exemple, aprendreu a utilitzar l'expressió constant per definir el valor constant dels elements enum.

#incloure

/ * Definiu el tipus enum: inicialització personalitzada mitjançant expressió constant
aquí s’utilitza l’expressió constant en cas de:
a. IO_ERROR i
b. ERROR DE CONNEXIÓ
Aquesta és una forma inusual de definir els elements enum; no obstant això, això
programa demostra que aquesta manera d'inicialització dels elements enum és possible a c.
* /


enumerror{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
ERROR DE CONNEXIÓ= 2 == 2,
PRINT_ERROR
};

intprincipal()
{

/ * Declara variable enum * /
enumerror Hw_Error;

printf ('Configurant Hw_Error a IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a NETWORK_ERROR n');
Hw_Error=ERROR DE CONNEXIÓ;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

tornar 0;
}

https://lh4.googleusercontent.com/9FAbPOnM95LiP_UQvg40oHSW4sv34aqpFgasbHMiy06Z_rKEom81TuMCVsfxWaZedtQOMEQx7ef_5qEfRVcNrUvhitDzOcTvYXregm4Udaby1NmwOil_Qhpr_oD4UQ

Exemple 4: enum Abast

En aquest exemple, aprendreu com funciona la regla d'abast per a enum. Es podria haver utilitzat un MACRO (#define) per definir una constant en lloc de l'enum, però la regla d'abast no funciona per a MACRO.

#incloure

intprincipal()
{

/ * Definiu el tipus d'enum * /
enumError_1{
IO_ERROR= 10,
DISK_ERROR,
ERROR DE CONNEXIÓ= 3,
PRINT_ERROR
};


{

/ * Definiu el tipus d'enum a l'abast intern * /
enumError_1{
IO_ERROR= 20,
DISK_ERROR,
ERROR DE CONNEXIÓ= 35,
PRINT_ERROR
};

/ * Declara variable enum * /
enumError_1 Hw_Error;
printf ('Configurant Hw_Error a IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a NETWORK_ERROR n');
Hw_Error=ERROR DE CONNEXIÓ;
printf ('Valor de Hw_Error =% d n',Hw_Error);

printf (' nConfigurant Hw_Error a PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Valor de Hw_Error =% d n',Hw_Error);
}
tornar 0;
}

Comparació entre enum i macro

Enum macro
La regla d'abast és aplicable per a enum. La regla d'abast no s'aplica a Macro.
L'assignació de valor per defecte Enum es fa automàticament.

Enum és molt útil per definir un gran nombre de constants. El compilador pren la inicialització del valor constant per defecte.

El programador sempre ha de mencionar explícitament els valors de les constants de macro.

Aquest podria ser un procés tediós per a un gran nombre de constants, ja que el programador sempre ha de definir manualment cada valor constant mentre defineix la macro.

Conclusió

El programa enum en C es podria considerar un mètode opcional per a programes independents o projectes de mida petita, ja que els programadors sempre poden utilitzar macro en lloc d’un enum. No obstant això, els programadors experimentats solen utilitzar enum sobre macro per a projectes de desenvolupament de programari a gran escala. Això ajuda a escriure programes nets i llegibles.