Kuinka käyttää enumia C -kielellä

How Use Enum C Language



C -ohjelmointikielen enum -ohjelmaa käytetään kiinteiden vakioarvojen määrittämiseen, mikä on erittäin hyödyllistä puhtaiden ja luettavissa olevien ohjelmien kirjoittamisessa. Ohjelmoijat käyttävät yleensä luettelointia määritelläkseen ohjelmissaan nimettyjä kiinteitä vakioita parantaakseen luettavuutta ja ylläpidettävyyttä. Tässä artikkelissa käsitellään enumia yksityiskohtaisesti.

Syntaksi

enum <Enum -tyypin nimi> {
Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
…… .........,
Enumeration_Constant_Element-n,
};

Enumeration_Constant_Element-1: n oletusarvo on 0, Enumeration_Constant_Element-2 on 1, Enumeration_Constant_Element-3 on 2 ja Enumeration_Constant_Element-n on (n-1).







Syvä sukellus Enumiin

Nyt kun tiedämme luettelon tyypin määrittelyn syntaksin, katsotaanpa esimerkkiä:



enumVirhe{
IO_ERROR,
DISK_ERROR,
VERKKOVIRHE
};

Enum -avainsanaa on aina käytettävä laskentatyypin määrittämiseen. Joten aina, kun haluat määrittää luettelointityypin, sinun on käytettävä enum -avainsanaa ennen. Enum -avainsanan jälkeen sinun on käytettävä kelvollista tunnistetta määritelläksesi.



Yllä olevassa esimerkissä kääntäjä määrittää IO_ERROR: n integraaliarvoon: 0, DISK_ERROR: n integraalin arvoon: 1 ja NETWORK_ERROR: n integrointiarvoon: 2. Oletuksena ensimmäiselle enum-elementille annetaan aina arvo 0, seuraavaksi enum-elementille annetaan arvo 1 ja niin edelleen.





Tätä oletuskäyttäytymistä voidaan tarvittaessa muuttaa määrittämällä vakiointegraalin arvo nimenomaisesti seuraavasti:

enumVirhe{
IO_ERROR= 2,
DISK_ERROR,
VERKKOVIRHE= 8 ,
PRINT_ERROR
};

Tässä tapauksessa ohjelmoija on nimenomaisesti määrittänyt IO_ERROR -arvon arvoon 2, kääntäjä antaa DISK_ERROR -arvon arvoon 3, ohjelmoija määrittää nimen NETWORK_ERROR arvolle 8 ja PRINT_ERROR kääntäjän edellisen enum -elementin NETWORK_ERROR (eli 9) kiinteä arvo.



Joten ymmärrät nyt, miten määritellään käyttäjän määrittämä luettelointityyppi C: ssä. Onko mahdollista ilmoittaa muuttujan enum-tyyppinen muuttuja (kuten voimme ilmoittaa muuttujan, joka on kokonaisluku)? Kyllä se on! Voit ilmoittaa enum -muuttujan seuraavasti:

enumVirhe Hw_Error;

Jälleen enum on avainsana tässä, Error on enum -tyyppi ja Hw_Error on enum -muuttuja.

Tarkastelemme nyt seuraavia esimerkkejä ymmärtääksemme enumin erilaisia ​​käyttötapoja:

  • Esimerkki 1: Enum -määrityksen oletuskäyttö
  • Esimerkki 2: Muokatun enum -määritelmän käyttö
  • Esimerkki 3: enum -määritelmä vakiolausekkeella
  • Esimerkki 4: enum -laajuus

Esimerkki 1: Enum -oletus Määritelmä Käyttö

Tässä esimerkissä opit määrittämään luettelointityypin vakioarvoilla. Kääntäjä huolehtii oletusarvojen määrittämisestä enum -elementeille. Alla näet esimerkkiohjelman ja vastaavan lähdön.

#sisältää

/ * Määritä enum -tyyppi */
enumVirhe{
IO_ERROR,
DISK_ERROR,
VERKKOVIRHE
};

inttärkein()
{
enumVirhe Hw_Error; /* Luo enum -muuttuja*/

printf ('Asetetaan Hw_Error -arvoksi IO_ERROR n'');
Hw_Virhe=IO_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error arvoksi DISK_ERROR n'');
Hw_Virhe=DISK_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi NETWORK_ERROR n'');
Hw_Virhe=VERKKOVIRHE;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

palata 0;
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBZZZZZFZP

Esimerkki 2: Muokatun enum -määritelmän käyttö

Tässä esimerkissä opit määrittämään luettelointityypin mukautetulla vakioarvolla. Lisäksi tämä esimerkki auttaa sinua ymmärtämään, miten mukautettujen vakioiden alustus voidaan tehdä missä tahansa satunnaisessa järjestyksessä. Tässä esimerkissä olemme nimenomaisesti määrittäneet vakion arvon 1stja 3rdenum -elementtejä (eli IO_ERROR ja NETWORK_ERROR, vastaavasti), mutta olemme ohittaneet 2: n nimenomaisen alustuksentoinenja 4thelementtejä. Kääntäjän vastuulla on nyt määrittää oletusarvot 2: lletoinenja 4thenum -elementit (eli DISK_ERROR ja PRINT_ERROR, vastaavasti). DISK_ERROR -arvoksi määritetään 3 ja PRINT_ERROR -arvoksi 9. Alla näet esimerkkiohjelman ja tuloksen.

#sisältää

/* Määritä enum -tyyppi - Mukautettu alustus*/
enumVirhe{
IO_ERROR= 2,
DISK_ERROR,
VERKKOVIRHE= 8,
PRINT_ERROR
};

inttärkein()
{

/* Ilmoita muuttujan muuttuja*/
enumVirhe Hw_Error;

printf ('Asetetaan Hw_Error -arvoksi IO_ERROR n'');
Hw_Virhe=IO_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error arvoksi DISK_ERROR n'');
Hw_Virhe=DISK_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi NETWORK_ERROR n'');
Hw_Virhe=VERKKOVIRHE;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi PRINT_ERROR n'');
Hw_Virhe=PRINT_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

palata 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhaf4IzqkffKFK

Esimerkki 3: Enum -määritys vakiolausekkeen avulla

Tässä esimerkissä opit käyttämään vakiolauseketta enum -elementtien vakioarvon määrittämiseen.

#sisältää

/* Määritä enum -tyyppi - mukautettu alustus vakiolausekkeella
tässä käytetään jatkuvaa ilmaisua, jos:
a. IO_ERROR ja
b. VERKKOVIRHE
Tämä on epätavallinen tapa määritellä enum -elementit; kuitenkin tämä
ohjelma osoittaa, että tämä tapa enum -elementtien alustus on mahdollista c.
* /


enumVirhe{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
VERKKOVIRHE= 2 == 2,
PRINT_ERROR
};

inttärkein()
{

/* Ilmoita muuttujan muuttuja*/
enumVirhe Hw_Error;

printf ('Asetetaan Hw_Error -arvoksi IO_ERROR n'');
Hw_Virhe=IO_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error arvoksi DISK_ERROR n'');
Hw_Virhe=DISK_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi NETWORK_ERROR n'');
Hw_Virhe=VERKKOVIRHE;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi PRINT_ERROR n'');
Hw_Virhe=PRINT_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

palata 0;
}

https://lh4.googleusercontent.com/9FAbPOnM95LiP_UQvg40oHSW4sv34aqpFgasbHMiy06Z_rKEom81TuMCVsfxWaZedtQOMEQx7ef_5qEfRVcNrUvhitDzOXT

Esimerkki 4: enum Scope

Tässä esimerkissä opit, kuinka laajuussääntö toimii enumille. MACRO: ta (#define) olisi voitu käyttää määrittämään vakio enumin sijaan, mutta täsmäytyssääntö ei toimi MACRO: ssa.

#sisältää

inttärkein()
{

/ * Määritä enum -tyyppi */
enumVirhe_1{
IO_ERROR= 10,
DISK_ERROR,
VERKKOVIRHE= 3,
PRINT_ERROR
};


{

/* Määritä enum -tyyppi sisäpiirissä*/
enumVirhe_1{
IO_ERROR= kaksikymmentä,
DISK_ERROR,
VERKKOVIRHE= 35,
PRINT_ERROR
};

/* Ilmoita muuttujan muuttuja*/
enumVirhe_1 Hw_Error;
printf ('Asetetaan Hw_Error -arvoksi IO_ERROR n'');
Hw_Virhe=IO_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error arvoksi DISK_ERROR n'');
Hw_Virhe=DISK_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi NETWORK_ERROR n'');
Hw_Virhe=VERKKOVIRHE;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);

printf ('' nAsetetaan Hw_Error -arvoksi PRINT_ERROR n'');
Hw_Virhe=PRINT_ERROR;
printf ('Hw_Virheen arvo = %d n'',Hw_Virhe);
}
palata 0;
}

Vertailu enumin ja makron välillä

Enum Makro
Soveltamissääntöä sovelletaan enumiin. Soveltamissääntö ei koske makroa.
Enum -arvon oletusmääritys tapahtuu automaattisesti.

Enum on erittäin hyödyllinen määritettäessä suuri määrä vakioita. Kääntäjä suorittaa oletusarvoisen vakioarvon alustuksen.

Ohjelmoijan on aina mainittava makrovakioarvot.

Tämä voi olla työläs prosessi suurelle määrälle vakioita, koska ohjelmoijan on aina määritettävä manuaalisesti jokainen vakioarvo määrittäessään makroa.

Johtopäätös

C-luokan enum-ohjelmaa voidaan pitää valinnaisena menetelmänä itsenäisille ohjelmille tai pienille projekteille, koska ohjelmoijat voivat aina käyttää makroa enumin sijaan. Kokeneilla ohjelmoijilla on kuitenkin taipumus käyttää enum over macroa suurissa ohjelmistokehitysprojekteissa. Tämä auttaa kirjoittamaan puhtaita ja luettavia ohjelmia.