Süntaks
loendLoendamine_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 vigaIO_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”
Ü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 vigaIO_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.
# kaasataint 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.