C Programmeerimine

Kuidas kasutada enumit C-keeles

Kuidas kasutada enumit C-keeles
Integreeruvate konstantsete väärtuste määratlemiseks kasutatakse C-programmeerimiskeeles olevat loendiprogrammi, millest on palju abi puhaste ja loetavate programmide kirjutamisel. Programmeerijad kasutavad tavaliselt loendit, et määratleda oma integreeritud konstandid oma programmides, et tagada tarkvara parem loetavus ja hooldatavus. Selles artiklis käsitletakse üksikasjalikult enumit.

Süntaks

loend
Loendamine_Konstant_Element-1,
Loendamine_Konstant_Element-2,
Loendamine_Konstant_Element-3,
… ,
Loendamine_konstant_Element-n,
;

Loendi_Konstant_Element-1 vaikeväärtus on 0, Loenduse_Konstant_Eelement-2 väärtus on 1, Loenduse_Konstant_Eelement-3 väärtus on 2 ja Loenduse_Konstant_Eelement-n väärtus on (n-1).

Sukeldu sügavale Enumi

Kuna teame loenduse tüübi määratlemiseks süntaksit, vaatleme ühte näidet:

loe viga
IO_ERROR,
DISK_VIGA,
NETWORK_ERROR
;

Loendamise tüübi määratlemiseks tuleb alati kasutada märksõna „enum”. Seega, kui soovite loenduse tüüpi määratleda, peate enne kasutama märksõna „enum” . Pärast märksõna „enum” peate märksõna määramiseks kasutama kehtivat identifikaatorit .

Ülalolevas näites määrab kompilaator integraalväärtusele IO_ERROR: 0, integraalväärtusele DISK_ERROR: 1 ja integraalväärtusele NETWORK_ERROR: 2.  Vaikimisi omistatakse esimesele loenduselemendile alati väärtus 0, järgmisele loendelemendile väärtus 1 ja nii edasi.

Seda vaikekäitumist saab vajadusel muuta, määrates konstantse integraalväärtuse selgesõnaliselt järgmiselt:

loe viga
IO_ERROR = 2,
DISK_VIGA,
VÕRKVIGA = 8 ,
PRINT_ERROR
;

Sel juhul määrab programmeerija IO_ERROR otsesõnu väärtusele 2, DISK_ERROR määrab kompilaator väärtusele 3, NETWORK_ERROR määrab programmeerija selgesõnaliselt väärtusele 8 ja PRINT_ERROR määratakse järgmisele eelmise loendielemendi NETWORK_ERROR lahutamatu väärtus (i.e., 9) koostaja.

Niisiis, saate nüüd aru, kuidas määratleda kasutaja määratud loenduse tüüp C-s. Kas on võimalik deklareerida loenditüüpi muutuja (nagu saame deklareerida täisarvu muutuja)?  Jah see on! Muutuja enum saab deklareerida järgmiselt:

enum tõrge Hw_Error;

Jällegi on siin märksõna „enum”, loenditüüp „Error” ja loendi muutuja „Hw_Error”.

Nüüd loeme loenduse erinevate kasutusviiside mõistmiseks järgmisi näiteid:

  • Näide 1: loendi definitsiooni vaikekasutus
  • Näide 2: kohandatud loendi definitsiooni kasutamine
  • Näide 3: loendi määratlus konstantse avaldise abil
  • Näide 4: loendi ulatus

Näide 1: Vaikimisi loend Definitsioon Kasutamine

Selles näites saate teada, kuidas defineerida loenduse tüüp vaikekonstantväärtustega. Koostaja hoolitseb loendi elementide vaikeväärtuste määramise eest. Allpool näete näidisprogrammi ja vastavat väljundit.

# kaasata
/ * Määrake loenditüüp * /
loe viga
IO_ERROR,
DISK_VIGA,
NETWORK_ERROR
;
int main ()

enum tõrge Hw_Error; / * Loendi muutuja loomine * /
printf ("Hw_Error seadistamine väärtusele IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nSeade Hw_Error väärtuseks DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nVeavea_vea seadmine võrguvõrguks \ n");
Hw_Error = VÕRK_VIGA;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
tagastama 0;

Näide 2: kohandatud loendi definitsiooni kasutamine

Selles näites saate teada, kuidas määratleda loenduse tüüp kohandatud konstantse väärtusega. Samuti aitab see näide mõista, kuidas saab kohandatud konstandide lähtestamist suvalises juhuslikus järjekorras. Selles näites oleme selgesõnaliselt määranud 1 püsiväärtusest ja 3rd enum elemendid (st.e., IO_ERROR ja NETWORK_ERROR), kuid oleme kahe konkreetse initsialiseerimise vahele jätnudnd ja 4th elemendid. Nüüd on kompilaatori kohustus määrata 2-le vaikeväärtusednd ja 4th enum elemendid (st.e., Vastavalt DISK_ERROR ja PRINT_ERROR). DISK_ERROR määratakse väärtusele 3 ja PRINT_ERROR määratakse väärtusele 9. Allpool näete näidisprogrammi ja väljundit.

# kaasata
/ * Määrake loendi tüüp - kohandatud initsialiseerimine * /
loe viga
IO_ERROR = 2,
DISK_VIGA,
VÕRKVIGA = 8,
PRINT_ERROR
;
int main ()

/ * Deklareeri muutuja enum * /
enum tõrge Hw_Error;
printf ("Hw_Error seadistamine väärtusele IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nSeade Hw_Error väärtuseks DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nVeavea_vea seadmine võrguvõrguks \ n");
Hw_Error = VÕRK_VIGA;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nHw_Error'i määramine väärtusele PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
tagastama 0;

Näide 3: Loendi määratlus, kasutades püsivaldist

Selles näites saate teada, kuidas konstantväljendit kasutada loenduselementide konstantväärtuse määramiseks.

# kaasata
/ * Määratlege loenditüüp - kohandatud initsialiseerimine pideva avaldise abil
konstantset väljendit kasutatakse siin juhul, kui:
a. IO_ERROR ja
b. NETWORK_ERROR
See on ebatavaline viis enumi elementide määratlemiseks; siiski see
programm näitab, et see loendielementide initsialiseerimise viis on võimalik c-s.
* /
loe viga
IO_ERROR = 1 + 2 * 3 + 4,
DISK_VIGA,
VÕRKVIGA = 2 == 2,
PRINT_ERROR
;
int main ()

/ * Deklareeri muutuja enum * /
enum tõrge Hw_Error;
printf ("Hw_Error seadistamine väärtusele IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nSeade Hw_Error väärtuseks DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nVeavea_vea seadmine võrguvõrguks \ n");
Hw_Error = VÕRK_VIGA;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nHw_Error'i määramine väärtusele PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
tagastama 0;

Näide 4: loetelu ulatus

Selles näites saate teada, kuidas skaalareegel reegli jaoks töötab. Konstandi määramiseks loendi asemel oleks võinud kasutada MACRO-d (#define), kuid ulatuse reegel ei tööta MACRO-s.

# kaasata
int main ()

/ * Määrake loenditüüp * /
loe tõrge_1
IO_ERROR = 10,
DISK_VIGA,
VÕRK_VIGA = 3,
PRINT_ERROR
;

/ * Määrake loenditüüp siseruumis * /
loe tõrge_1
IO_ERROR = 20,
DISK_VIGA,
VÕRK_VIGA = 35,
PRINT_ERROR
;
/ * Deklareeri muutuja enum * /
loendi tõrge_1 Hw_Error;
printf ("Hw_Error seadistamine väärtusele IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nSeade Hw_Error väärtuseks DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nVeavea_vea seadmine võrguvõrguks \ n");
Hw_Error = VÕRK_VIGA;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);
printf ("\ nHw_Error'i määramine väärtusele PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Hw_Vea väärtus =% d \ n", Hw_Viga);

tagastama 0;

Võrdlus loendi ja makro vahel

Enum Makro
Reguleerimisala reegel on kohaldatav loenditele. Reguleerimisala reegel ei ole makro puhul kohaldatav.
Vaikimisi loendi väärtus määratakse automaatselt.

Enum on suurel hulgal konstantide määratlemisel abiks. Koostaja lähtestab vaikeväärtuse vaikeväärtuse.

Makro konstantväärtused peab programmeerija alati selgesõnaliselt mainima.

See võib olla tüütu protsess paljude konstandide jaoks, kuna programmeerija peab iga konstandi väärtuse käsitsi määratlema makro määratlemisel.

Järeldus

C-s olevat loendiprogrammi võib pidada eraldi programmide või väikesemahuliste projektide jaoks valikuliseks meetodiks, kuna programmeerijad saavad loendi asemel alati kasutada makrot. Kogenud programmeerijad kipuvad aga suuremahuliste tarkvaraarendusprojektide jaoks kasutama enumit makro asemel. See aitab kirjutada puhtaid ja loetavaid programme.

Sid Meieri Civilization VI allalaadimine ja mängimine Linuxis
Sissejuhatus mängu Civilization 6 on kaasaegne kontseptsioon, mis tutvustati Age of Empires mängude sarjas. Idee oli üsna lihtne; alustaksite kõige põ...
Kuidas installida ja mängida Doomi Linuxis
Doomi sissejuhatus Doom-seeria sai alguse 90ndatel pärast algse Doomi väljaandmist. See oli kohene hitt ja sellest ajast alates on mänguseeria pälvinu...
Vulkan Linuxi kasutajatele
Iga uue põlvkonna graafikakaartidega näeme, et mängude arendajad ületavad graafilise truuduse piire ja jõuavad fotorealismile ühe sammu lähemale. Kuid...