C Programiranje

Kako uporabljati enum v jeziku C

Kako uporabljati enum v jeziku C
Program enum v programskem jeziku C se uporablja za definiranje integralnih konstantnih vrednosti, kar je zelo koristno pri pisanju čistih in berljivih programov. Programerji običajno uporabljajo štetje, da v svojih programih opredelijo imenovane integralne konstante, da zagotovijo boljšo berljivost in vzdržnost programske opreme. Ta članek bo podrobno obravnaval naštevanje.

Sintaksa

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 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 Napaka
IO_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” . Po ključni besedi "enum" morate za določitev uporabiti veljaven identifikator .

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 Napaka
IO_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.

#include
int 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.

Kako spremeniti miškin kazalec in velikost, barvo in shemo kazalca v sistemu Windows 10
Kazalec miške in kazalec v operacijskem sistemu Windows 10 sta zelo pomembna vidika operacijskega sistema. To lahko rečemo tudi za druge operacijske s...
Brezplačni in odprtokodni igralni mehanizmi za razvoj iger Linux
Ta članek bo zajemal seznam brezplačnih in odprtokodnih igralnih mehanizmov, ki jih je mogoče uporabiti za razvoj 2D in 3D iger v Linuxu. Obstaja veli...
Vadnica Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider je dvanajsti dodatek k seriji Tomb Raider - franšiza akcijsko-pustolovskih iger, ki jo je ustvaril Eidos Montreal. Kritiki i...