Kako uporabljati enum v jeziku C

How Use Enum C Language



Program za naštevanje v programskem jeziku C se uporablja za opredelitev integralnih konstantnih vrednosti, kar je zelo koristno pri pisanju čistih in berljivih programov. Programerji običajno uporabljajo naštevanje za določitev imenovanih integralnih konstant v svojih programih, da zagotovijo boljšo berljivost in vzdrževanje programske opreme. Ta članek bo podrobno obravnaval enum.

Sintaksa

naštej <Ime vrste Enum> {
Enumeration_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, vrednost Enumeration_Constant_Element-n pa je (n-1).







Poglobite se v Enum

Zdaj, ko poznamo skladnjo za opredelitev vrste naštevanja, poglejmo primer:



naštejNapaka{
IO_ERROR,
DISK_ERROR,
OMREŽNA NAPAKA
};

Ključno besedo enum je treba vedno uporabiti za določitev vrste štetja. Torej, kadar koli želite določiti vrsto naštevanja, morate prej uporabiti ključno besedo enum. Po ključni besedi enum morate za določitev.



V zgornjem primeru bo prevajalnik dodelil IO_ERROR integralni vrednosti: 0, DISK_ERROR integralni vrednosti: 1 in NETWORK_ERROR integralni vrednosti: 2. Privzeto je prvemu elementu enum vedno dodeljena vrednost 0, naslednjemu elementu enum je dodeljena vrednost 1 itd.





To privzeto vedenje lahko po potrebi spremenite tako, da eksplicitno dodelite konstantno integralno vrednost, kot sledi:

naštejNapaka{
IO_ERROR= 2,
DISK_ERROR,
OMREŽNA NAPAKA= 8 ,
PRINT_ERROR
};

V tem primeru programer izrecno dodeli IO_ERROR na vrednost 2, prevajalnik DISK_ERROR na vrednost 3, programer NETWORK_ERROR izrecno dodeli vrednosti 8, naslednji pa PRINT_ERROR integralna vrednost prejšnjega elementa naštevanja NETWORK_ERROR (tj. 9) prevajalnika.



Torej, zdaj razumete, kako definirati uporabniško definiran tip štetja v C. Ali je mogoče razglasiti spremenljivko vrste enum (kot lahko razglasimo spremenljivko tipa celih števil)? Ja, res je! Spremenljivko enum lahko razglasite na naslednji način:

naštejNapaka Hw_Error;

Tudi tu je ključna beseda enum, napaka je vrsta enum in Hw_Error je spremenljivka enum.

Zdaj bomo pogledali naslednje primere, da bi razumeli različne uporabe enuma:

  • Primer 1: Uporaba privzete definicije naštevanja
  • Primer 2: Uporaba definicije naštevanja po meri
  • Primer 3: opredelitev enuma z uporabo konstantnega izraza
  • Primer 4: obseg naštevanja

Primer 1: Privzeta uporaba definicije enuma

V tem primeru se boste naučili, kako določiti vrsto štetja s privzetimi konstantnimi vrednostmi. Prevajalnik bo poskrbel za dodelitev privzetih vrednosti elementom enum. Spodaj boste videli primer programa in ustrezen izhod.

#vključi

/ * Določite vrsto naštevanja */
naštejNapaka{
IO_ERROR,
DISK_ERROR,
OMREŽNA NAPAKA
};

intglavni()
{
naštejNapaka 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',Hw_Error);

printf (' nNastavitev Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na NETWORK_ERROR n');
Hw_Error=OMREŽNA NAPAKA;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

vrnitev 0;
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBWoiMOhzApzXey4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBVoiMOhzAQPzXey4

Primer 2: Uporaba definicije naštevanja po meri

V tem primeru se boste naučili, kako določiti vrsto štetja s konstantno vrednostjo po meri. Ta primer vam bo tudi pomagal razumeti, kako je mogoče inicializacijo konstant po meri opraviti v poljubnem naključnem vrstnem redu. V tem primeru smo izrecno definirali konstantno vrednost za 1stin 3rdenum elementov (tj. IO_ERROR oziroma NETWORK_ERROR), vendar smo izrecno inicializacijo za 2 preskočilindin 4thelementi. Zdaj je prevajalnik odgovoren za dodelitev privzetih vrednosti 2ndin 4thelementi naštevanja (tj. DISK_ERROR oziroma PRINT_ERROR). DISK_ERROR bo dodeljen vrednosti 3, PRINT_ERROR pa vrednosti 9. Spodaj boste videli primer programa in izhod.

#vključi

/* Določite vrsto enuma - Inicializacija po meri*/
naštejNapaka{
IO_ERROR= 2,
DISK_ERROR,
OMREŽNA NAPAKA= 8,
PRINT_ERROR
};

intglavni()
{

/* Razglasi spremenljivko naštevanja*/
naštejNapaka Hw_Error;

printf ('Nastavitev Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na NETWORK_ERROR n');
Hw_Error=OMREŽNA NAPAKA;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

vrnitev 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLj6wxxwxxw

Primer 3: Opredelitev naštevanja z uporabo konstantnega izraza

V tem primeru se boste naučili uporabljati konstantni izraz za določanje konstantne vrednosti za elemente enum.

#vključi

/* Določite vrsto enuma - inicializacija po meri z uporabo konstantnega izraza
tukaj se uporablja stalen izraz v primeru:
a. IO_ERROR in
b. OMREŽNA NAPAKA
To je nenavaden način opredelitve elementov naštevanja; pa tole
program dokazuje, da je ta način inicializacije elementov naštevanja možen v c.
* /


naštejNapaka{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
OMREŽNA NAPAKA= 2 == 2,
PRINT_ERROR
};

intglavni()
{

/* Razglasi spremenljivko naštevanja*/
naštejNapaka Hw_Error;

printf ('Nastavitev Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na NETWORK_ERROR n');
Hw_Error=OMREŽNA NAPAKA;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

vrnitev 0;
}

https://lh4.googleusercontent.com/9FAbPOnM95LiP_UQvg40oHSW4sv34aqpFgasbHMiy06Z_rKEom81TuMCVsfxWaZedtQOMEQx7ef_5qEfRVcNrUvhitDzOcDcOc4c4c4c4c8c8c8c8c8c8c9c8c8c6c8c8c8c8cbcbcbccbcccdccc6c6c8c8c8c8c6c8c6c8c8c3c8c8c8c3c8c8c8c8c2c8c8c8c8EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEžž v o tem, kako deluje.

Primer 4: enum Scope

V tem primeru boste izvedeli, kako pravilo določanja obsega deluje za enum. MACRO (#define) bi lahko uporabili za opredelitev konstante namesto naštevanja, vendar pravilo obsega ne deluje za MACRO.

#vključi

intglavni()
{

/ * Določite vrsto naštevanja */
naštejNapaka_1{
IO_ERROR= 10,
DISK_ERROR,
OMREŽNA NAPAKA= 3,
PRINT_ERROR
};


{

/* Določite vrsto enuma v notranjem obsegu*/
naštejNapaka_1{
IO_ERROR= dvajset,
DISK_ERROR,
OMREŽNA NAPAKA= 35,
PRINT_ERROR
};

/* Razglasi spremenljivko naštevanja*/
naštejNapaka_1 Hw_Error;
printf ('Nastavitev Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na NETWORK_ERROR n');
Hw_Error=OMREŽNA NAPAKA;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);

printf (' nNastavitev Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Vrednost napake Hw_Error = %d n',Hw_Error);
}
vrnitev 0;
}

Primerjava med naštevanjem in makrom

Naštej Makro
Za enum velja pravilo obsega. Pravilo obsega ne velja za makro.
Privzeta dodelitev vrednosti enuma se zgodi samodejno.

Enum je zelo koristen pri določanju velikega števila konstant. Prevajalnik prevzame privzeto inicializacijo konstantne vrednosti.

Vrednosti konstante makra mora programer vedno izrecno omeniti.

To je lahko dolgočasen postopek za veliko število konstant, saj mora programer vedno definirati vsako konstantno vrednost, medtem ko definira makro.

Zaključek

Program za naštevanje v jeziku C bi lahko veljal za neobvezno metodo za samostojne programe ali majhne projekte, saj lahko programerji namesto enuma vedno uporabljajo makro. Vendar pa izkušeni programerji običajno uporabljajo enum over macro za obsežne projekte razvoja programske opreme. To pomaga pri pisanju čistih in berljivih programov.