C Ohjelmointi

Kuinka käyttää enumia C-kielellä

Kuinka käyttää enumia C-kielellä
C-ohjelmointikielen enum-ohjelmaa käytetään määrittämään integraalivakioarvot, mikä on erittäin hyödyllistä puhtaiden ja luettavien ohjelmien kirjoittamisessa. Ohjelmoijat käyttävät yleensä luetteloa määrittelemään integroidut vakiot ohjelmiinsa paremman luettavuuden ja ylläpidettävyyden takaamiseksi. Tässä artikkelissa käsitellään enumia yksityiskohtaisesti.

Syntaksi

enum
Listaus_Vakio_Elementti-1,
Listaus_Vakio_Elementti-2,
Luettelon_Vakio_Elementti-3,
… ,
Listaus_Vakio_Elementti-n,
;

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

Sukella syvälle Enumiin

Koska tiedämme syntaksin laskentatyypin määrittämiseksi, katsokaamme esimerkkiä:

enum virhe
IO_ERROR,
DISK_ERROR,
VERKKOVIRHE
;

Avainsanaa "enum" on käytettävä aina luettelointityypin määrittelemiseen. Joten aina, kun haluat määrittää luettelointityypin, sinun on käytettävä aiemmin "enum" -avainsanaa . Avainsanan "enum" jälkeen sinun on käytettävä kelvollista tunnistetta avainsanan määrittelemiseen .

Yllä olevassa esimerkissä kääntäjä määrittää integraaliarvolle IO_ERROR: 0, integraaliarvolle DISK_ERROR: 1 ja integraaliarvolle NETWORK_ERROR: 2.  Ensimmäiselle enum-elementille määritetään oletusarvoisesti aina arvo 0, seuraavalle enum-elementille arvo 1 ja niin edelleen.

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

enum virhe
IO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8 ,
TULOSTUSVIRHE
;

Tässä tapauksessa ohjelmoija on nimenomaisesti määrittänyt arvon IO_ERROR arvoon 2, kääntäjä osoittaa arvon DISK_ERROR arvoon 3, ohjelmoija on nimenomaisesti määrittänyt NETWORK_ERROR arvoon 8 ja PRINT_ERROR osoitetaan seuraavaan edellisen enum-elementin integraaliarvo NETWORK_ERROR (i.e., 9) kääntäjä.

Joten ymmärrät nyt, kuinka määritetään käyttäjän määrittelemä luettelotyyppi C: ssä. Onko mahdollista ilmoittaa muuttuja, jonka tyyppi on enum (kuten voimme ilmoittaa muuttujan, joka on kokonaislukutyyppi)?  Kyllä se on! Voit ilmoittaa enum-muuttujan seuraavasti:

enum virhe 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 eri käyttötarkoituksia:

  • Esimerkki 1: Enum-määritelmän oletuskäyttö
  • Esimerkki 2: Mukautettu enum-määritelmän käyttö
  • Esimerkki 3: Enum-määritelmä vakiolauseketta käyttäen
  • Esimerkki 4: enum-laajuus

Esimerkki 1: Oletusarvo Määritelmä Käyttö

Tässä esimerkissä opit määrittämään laskentatyypin vakio-oletusarvoilla. Kääntäjä huolehtii oletusarvojen osoittamisesta enum-elementeille. Alla näet esimerkkiohjelman ja vastaavan tuotoksen.

#sisältää
/ * Määritä laskentatyyppi * /
enum virhe
IO_ERROR,
DISK_ERROR,
VERKKOVIRHE
;
int main ()

enum virhe Hw_Error; / * Luodaan enum-muuttuja * /
printf ("Hw_Error-asetukseksi IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi DISK_ERROR \ n");
Hw_Error = LEVYVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi NETWORK_ERROR \ n");
Hw_Error = VERKKOVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
paluu 0;

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

Tässä esimerkissä opit määrittämään luettelotyypin mukautetulla vakioarvolla. Lisäksi tämä esimerkki auttaa sinua ymmärtämään, kuinka mukautettujen vakioiden alustus voidaan tehdä missä tahansa satunnaisessa järjestyksessä. Tässä esimerkissä olemme nimenomaisesti määritelleet vakion arvon 1: llest ja 3rd enum-elementit (i.e., IO_ERROR ja NETWORK_ERROR), mutta olemme ohittaneet 2: n nimenomaisen alustuksennd ja 4th elementtejä. Kääntäjän vastuulla on nyt määrittää oletusarvot 2: llend ja 4th enum-elementit (i.e., DISK_ERROR ja PRINT_ERROR). DISK_ERROR määritetään arvoon 3 ja PRINT_ERROR osoitetaan arvoon 9. Alla näet esimerkkiohjelman ja lähdön.

#sisältää
/ * Määritä laskentatyyppi - Mukautettu alustus * /
enum virhe
IO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8,
TULOSTUSVIRHE
;
int main ()

/ * Ilmoita enum-muuttuja * /
enum virhe Hw_Error;
printf ("Hw_Error-asetukseksi IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi DISK_ERROR \ n");
Hw_Error = LEVYVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi NETWORK_ERROR \ n");
Hw_Error = VERKKOVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Errorin asetukseksi PRINT_ERROR \ n");
Hw_Error = TULOSTUSVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
paluu 0;

Esimerkki 3: Enum-määritelmä vakiolausekkeella

Tässä esimerkissä opit vakiolausekkeen avulla määrittelemään enum-elementtien vakioarvon.

#sisältää
/ * Määritä laskentatyyppi - mukautettu alustus vakiolausekkeella
vakiolauseketta käytetään tässä seuraavissa tapauksissa:
a. IO_ERROR ja
b. VERKKOVIRHE
Tämä on epätavallinen tapa määritellä enum-elementit; kuitenkin tämä
ohjelma osoittaa, että tämä enum-elementtien alustamisen tapa on mahdollista kohdassa c.
* /
enum virhe
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
VERKKOVIRHE = 2 == 2,
TULOSTUSVIRHE
;
int main ()

/ * Ilmoita enum-muuttuja * /
enum virhe Hw_Error;
printf ("Hw_Error-asetukseksi IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi DISK_ERROR \ n");
Hw_Error = LEVYVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi NETWORK_ERROR \ n");
Hw_Error = VERKKOVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Errorin asetukseksi PRINT_ERROR \ n");
Hw_Error = TULOSTUSVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
paluu 0;

Esimerkki 4: Enum-laajuus

Tässä esimerkissä opit, kuinka kattavuussääntö toimii enumille. MACRO: ta (#define) olisi voitu käyttää vakion määrittelemiseen enumin sijasta, mutta ulottuvuussääntö ei toimi MACRO: lla.

#sisältää
int main ()

/ * Määritä laskentatyyppi * /
enum Error_1
IO_ERROR = 10,
DISK_ERROR,
NETWORK_ERROR = 3,
TULOSTUSVIRHE
;

/ * Määritä laskentatyyppi sisäpuolella * /
enum Error_1
IO_ERROR = 20,
DISK_ERROR,
NETWORK_ERROR = 35,
TULOSTUSVIRHE
;
/ * Ilmoita enum-muuttuja * /
enum Error_1 Hw_Error;
printf ("Hw_Error-asetukseksi IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi DISK_ERROR \ n");
Hw_Error = LEVYVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Error-asetukseksi NETWORK_ERROR \ n");
Hw_Error = VERKKOVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);
printf ("\ nHw_Errorin asetukseksi PRINT_ERROR \ n");
Hw_Error = TULOSTUSVIRHE;
printf ("Hw_Virheen arvo =% d \ n", Hw_Virhe);

paluu 0;

Vertailu enumin ja makron välillä

Enum Makro
Laajennussääntöä sovelletaan enumiin. Scoping-sääntö ei ole käytettävissä makrolla.
Oletusarvon määritys tapahtuu automaattisesti.

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

Ohjelmoijan on aina mainittava makrovakioarvot nimenomaisesti.

Tämä voi olla työläs prosessi suurelle määrälle vakioita, koska ohjelmoijan on aina määritettävä kukin vakioarvo manuaalisesti samalla kun määritetään makro.

Johtopäätös

C-luvussa olevaa enum-ohjelmaa voidaan pitää valinnaisena menetelmänä erillisissä ohjelmissa tai pienikokoisissa projekteissa, koska ohjelmoijat voivat aina käyttää makroa enumin sijaan. Kokeneet ohjelmoijat käyttävät kuitenkin enumia makron sijaan laajamittaisissa ohjelmistokehitysprojekteissa. Tämä auttaa kirjoittamaan puhtaita ja luettavia ohjelmia.

Parhaat Linux-peliohjaimen kartoitussovellukset
Jos haluat pelata pelejä Linuxissa peliohjaimella tyypillisen näppäimistön ja hiiren syöttöjärjestelmän sijaan, on sinulle hyödyllisiä sovelluksia. Mo...
Hyödyllisiä työkaluja Linux-pelaajille
Jos haluat pelata pelejä Linuxissa, on todennäköistä, että olet käyttänyt sovelluksia ja apuohjelmia, kuten Wine, Lutris ja OBS Studio, pelikokemuksen...
HD Remastered Games for Linux that Never had a Linux Release Earlier
Many game developers and publishers are coming up with HD remaster of old games to extend the life of franchise, please fans requesting compatibility ...