Sintaksa
enumEnumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
.. ,
Enumeration_Constant_Element-n,
;
Privzeta vrednost Enumeration_Constant_Element-1 je 0, vrednost Enumeration_Constant_Element-2 je 1, vrednost Enumeration_Constant_Element-3 je 2 in vrednost Enumeration_Constant_Element-n je (n-1).
Globoko potopite v Enum
Zdaj, ker poznamo sintakso za določanje vrste oštevilčenja, si oglejmo primer:
enum NapakaIO_ERROR,
DISK_ERROR,
OMREŽNA NAPAKA
;
Ključno besedo „enum“ je treba vedno uporabiti za določitev vrste oštevilčenja. Torej, kadar koli želite določiti vrsto naštevanja, morate prej uporabiti ključno besedo “enum”
V zgornjem primeru bo prevajalnik dodal IO_ERROR integralni vrednosti: 0, DISK_ERROR integralni vrednosti: 1 in NETWORK_ERROR integralni vrednosti: 2. Privzeto se prvemu elementu enum vedno dodeli vrednost 0, naslednjemu elementu enum pa vrednost 1 itd.
To privzeto vedenje lahko po potrebi spremenite tako, da konstantno integralno vrednost dodelite izrecno, kot sledi:
enum NapakaIO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8 ,
PRINT_ERROR
;
V tem primeru IO_ERROR programer izrecno dodeli vrednosti 2, DISK_ERROR prevajalnik dodeli vrednosti 3, NETWORK_ERROR programer izrecno dodeli vrednosti 8, PRINT_ERROR pa naslednji integralna vrednost prejšnjega elementa naštevanja NETWORK_ERROR (i.e., 9) s strani prevajalca.
Torej, zdaj razumete, kako v jeziku C definirate uporabniško določen tip oštevilčenja. Ali je mogoče razglasiti spremenljivko tipa enum (kot lahko razglasimo spremenljivko celoštevilčnega tipa)? Ja, je! Spremenljivko enum lahko prijavite na naslednji način:
enum Napaka Hw_Error;Tudi tu je ključna beseda "enum", vrsta enum "Error" in spremenljivka enum "Hw_Error".
Zdaj si bomo ogledali naslednje primere za razumevanje različnih načinov uporabe enum:
- Primer 1: Privzeta uporaba definicije enum
- 2. primer: Uporaba definicije po meri
- Primer 3: opredelitev enum z uporabo konstantnega izraza
- Primer 4: obseg naštevanja
Primer 1: Privzeta uporaba definicije enum
V tem primeru boste izvedeli, kako določiti vrsto naštevanja s privzetimi konstantnimi vrednostmi. Prevajalnik bo poskrbel za dodelitev privzetih vrednosti elementom enum. Spodaj boste videli primer programa in ustrezen izhod.
#include/ * Določite vrsto naštevanja * /
enum Napaka
IO_ERROR,
DISK_ERROR,
OMREŽNA NAPAKA
;
int main ()
enum Napaka Hw_Error; / * Ustvarjanje spremenljivke naštevanja * /
printf ("Nastavitev Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
vrnitev 0;
Primer 2: Uporaba definicije po meri
V tem primeru boste izvedeli, kako določite vrsto naštevanja s konstantno vrednostjo po meri. Tudi ta primer vam bo pomagal razumeti, kako je mogoče inicializacijo konstant po meri izvesti v poljubnem naključnem vrstnem redu. V tem primeru smo izrecno definirali konstantno vrednost za 1st in 3rd elementi enum (i.e., IO_ERROR oziroma NETWORK_ERROR), vendar smo preskočili izrecno inicializacijo za 2nd in 4th elementi. Zdaj je prevajalnik odgovoren, da dodeli privzete vrednosti 2nd in 4th elementi enum (i.e., DISK_ERROR oziroma PRINT_ERROR). DISK_ERROR bo dodeljen vrednosti 3, PRINT_ERROR pa vrednosti 9. Spodaj boste videli primer programa in rezultate.
#include/ * Določite vrsto naštevanja - inicializacija po meri * /
enum Napaka
IO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8,
PRINT_ERROR
;
int main ()
/ * Prijavi spremenljivko števila * /
enum Napaka Hw_Error;
printf ("Nastavitev Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
vrnitev 0;
Primer 3: Definicija števila z uporabo konstantnega izraza
V tem primeru se boste naučili, kako s konstantnim izrazom določiti konstantno vrednost elementov enum.
#include/ * Določite vrsto enum - inicializacija po meri s konstantnim izrazom
tukaj se uporablja konstanten izraz v primeru:
a. IO_ERROR in
b. OMREŽNA NAPAKA
To je nenavaden način določanja elementov naštevanja; vendar to
program dokazuje, da je ta način inicializacije elementov naštevanja možen v c.
* /
enum Napaka
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
NETWORK_ERROR = 2 == 2,
PRINT_ERROR
;
int main ()
/ * Prijavi spremenljivko števila * /
enum Napaka Hw_Error;
printf ("Nastavitev Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
vrnitev 0;
Primer 4: Obseg enum
V tem primeru boste izvedeli, kako pravilo za določanje obsega deluje za enum. MACRO (#define) bi lahko uporabili za definiranje konstante namesto enum, vendar pravilo obsega za MACRO ne deluje.
#includeint main ()
/ * Določite vrsto naštevanja * /
enum Napaka_1
IO_ERROR = 10,
DISK_ERROR,
NETWORK_ERROR = 3,
PRINT_ERROR
;
/ * Določite vrsto naštevanja v notranjem obsegu * /
enum Napaka_1
IO_ERROR = 20,
DISK_ERROR,
NETWORK_ERROR = 35,
PRINT_ERROR
;
/ * Prijavi spremenljivko števila * /
enum Error_1 Hw_Error;
printf ("Nastavitev Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
printf ("\ nNastavitev Hw_Error na PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Vrednost napake Hw_Error =% d \ n", napaka Hw_Error);
vrnitev 0;
Primerjava med enumom in makro
Enum | Makro |
Za enum velja pravilo obsega. | Pravilo obsega ne velja za makro. |
Privzeta dodelitev vrednosti Enum se izvede samodejno. Enum je zelo koristen pri določanju velikega števila konstant. Prevajalnik sprejme privzeto inicializacijo konstantne vrednosti. | Vrednosti konstant makrov mora programer vedno izrecno omeniti. To bi lahko bil dolgočasen postopek za veliko število konstant, saj mora programer vedno določiti vsako konstantno vrednost, medtem ko definira makro. |
Zaključek
Program naštevanja v jeziku C bi lahko veljal za neobvezno metodo za samostojne programe ali manjše projekte, saj lahko programerji vedno uporabljajo makro namesto števila. Vendar izkušeni programerji običajno uporabljajo enum nad makro za obsežne projekte razvoja programske opreme. To pomaga pri pisanju čistih in berljivih programov.