Kuidas kasutada enumit C -keeles

How Use Enum C Language



C -programmeerimiskeele enum -programmi kasutatakse integraalsete konstantsete väärtuste määratlemiseks, mis on väga kasulik puhaste ja loetavate programmide kirjutamisel. Programmeerijad kasutavad tavaliselt loendamist, et määratleda oma programmides nimetatud integraalkonstandid, et tagada tarkvara parem loetavus ja hooldatavus. Selles artiklis käsitletakse enumit üksikasjalikult.

Süntaks

enum <Enum Tüüp Nimi> {
Loendamine_pidev_element-1,
Loendamine_pidev_element-2,
Loendamine_pidev_element-3,
…… .........,
Loendamine_pidev_element-n,
};

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







Sügav sukeldumine Enumisse

Nüüd, kui me teame loenditüübi määratlemise süntaksi, vaatame näidet:



enumViga{
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
};

Loenditüübi määratlemiseks tuleb alati kasutada märksõna enum. Seega, kui soovite loenditüüpi määratleda, peate enne kasutama märksõna enum. Pärast märksõna enum peate selle määratlemiseks kasutama kehtivat identifikaatorit.



Ülaltoodud näites määrab kompilaator integraalväärtusele IO_ERROR: 0, integraalväärtusele DISK_ERROR: 1 ja integraalväärtusele NETWORK_ERROR: 2. Vaikimisi määratakse esimesele enum-elemendile alati väärtus 0, järgmine enum-elemendile omistatakse väärtus 1 jne.





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

enumViga{
IO_ERROR= 2,
DISK_ERROR,
NETWORK_ERROR= 8 ,
PRINT_ERROR
};

Sel juhul määrab programmeerija sõnaselgelt väärtusele 2 väärtuse IO_ERROR, kompilaator määrab väärtusele 3 väärtuse DISK_ERROR, programmeerija määrab selgesõnaliselt väärtusele 8 väärtuse NETWORK_ERROR ja järgmisele PRINT_ERROR kompilaatori poolt eelmise enum -elemendi NETWORK_ERROR (st 9) lahutamatu väärtus.



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

enumViga Hw_Error;

Jällegi on siin märksõnaks enum, viga on enum -tüüp ja Hw_Error on muutuja enum.

Vaatame nüüd järgmisi näiteid, et mõista enumi erinevaid kasutusviise:

  • Näide 1: vaikimisi kasutatav enum -definitsiooni kasutamine
  • Näide 2: kohandatud enum -definitsiooni kasutamine
  • Näide 3: enum määratlus konstantse avaldise abil
  • Näide 4: enum ulatus

Näide 1: Vaikimisi enum Definition Usage

Selles näites saate teada, kuidas määratleda loenditüüp konstantse vaikeväärtusega. Kompilaator hoolitseb enum -elementide vaikeväärtuste määramise eest. Allpool näete näidisprogrammi ja vastavat väljundit.

#kaasake

/ * Määrake enumi tüüp */
enumViga{
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
};

intpeamine()
{
enumViga Hw_Error; /* Enum muutuja loomine*/

printf ('Hw_Error väärtuseks määratakse IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtuseks NETWORK_ERROR n');
Hw_Error=NETWORK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

tagasi 0;
}

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

Näide 2: kohandatud enumi määratluse kasutamine

Selles näites saate teada, kuidas määratleda loenditüüp kohandatud konstantse väärtusega. Samuti aitab see näide teil mõista, kuidas kohandatud konstantide lähtestamist saab teha suvalises järjekorras. Selles näites oleme selgesõnaliselt määratlenud konstantse väärtuse 1 jaoksstja 3rdenum elemendid (st vastavalt IO_ERROR ja NETWORK_ERROR), kuid oleme jätnud vahele 2ndja 4thelemente. Nüüd on kompilaatori kohustus määrata vaikimisi väärtused 2 -lendja 4thenum elemendid (st vastavalt DISK_ERROR ja PRINT_ERROR). DISK_ERROR määratakse väärtusele 3 ja PRINT_ERROR väärtusele 9. Allpool näete näidisprogrammi ja väljundit.

#kaasake

/* Määrake enumi tüüp - kohandatud initsialiseerimine*/
enumViga{
IO_ERROR= 2,
DISK_ERROR,
NETWORK_ERROR= 8,
PRINT_ERROR
};

intpeamine()
{

/* Deklareeri enum muutuja*/
enumViga Hw_Error;

printf ('Hw_Error väärtuseks määratakse IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtuseks NETWORK_ERROR n');
Hw_Error=NETWORK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

tagasi 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhaf4IzqhkN4qF9HcuGZ9thqlFfKfKfKFKKKK

Näide 3: Enumi määratlus konstantse avaldise abil

Selles näites saate teada, kuidas kasutada konstantset avaldist enum -elementide konstantse väärtuse määratlemiseks.

#kaasake

/* Määrake enum -tüüp - kohandatud initsialiseerimine konstantse avaldise abil
Pidevat väljendit kasutatakse siin järgmistel juhtudel:
a. IO_ERROR ja
b. NETWORK_ERROR
See on ebatavaline viis enum -elementide määratlemiseks; siiski see
programm näitab, et selline enum -elementide initsialiseerimise viis on c.
* /


enumViga{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
NETWORK_ERROR= 2 == 2,
PRINT_ERROR
};

intpeamine()
{

/* Deklareeri enum muutuja*/
enumViga Hw_Error;

printf ('Hw_Error väärtuseks määratakse IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtuseks NETWORK_ERROR n');
Hw_Error=NETWORK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

tagasi 0;
}

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

Näide 4: enum Reguleerimisala

Selles näites saate teada, kuidas ulatuse reegel töötab enumi jaoks. MACRO -d (#define) oleks võinud kasutada enumi asemel konstandi määratlemiseks, kuid ulatuse reegel ei tööta MACRO puhul.

#kaasake

intpeamine()
{

/ * Määrake enumi tüüp */
enumViga_1{
IO_ERROR= 10,
DISK_ERROR,
NETWORK_ERROR= 3,
PRINT_ERROR
};


{

/* Määra enum tüüp sisemises ulatuses*/
enumViga_1{
IO_ERROR= kakskümmend,
DISK_ERROR,
NETWORK_ERROR= 35,
PRINT_ERROR
};

/* Deklareeri enum muutuja*/
enumViga_1 Hw_Error;
printf ('Hw_Error väärtuseks määratakse IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtuseks NETWORK_ERROR n');
Hw_Error=NETWORK_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);

printf (' nSeadistatakse Hw_Error väärtusele PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error väärtus = %d n',Hw_Error);
}
tagasi 0;
}

Enumi ja makro võrdlus

Enum Makro
Ulatuse suhtes kohaldatakse ulatuse reeglit. Ulatusreegel ei kehti makro puhul.
Enumi väärtuse vaikimisi määramine toimub automaatselt.

Enum on suureks abiks suure hulga konstandite määratlemisel. Kompilaator kasutab vaikimisi konstantse väärtuse initsialiseerimist.

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

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

Järeldus

Enum-programmi C-s võib pidada valikuliseks meetodiks iseseisvate programmide või väikese suurusega projektide jaoks, kuna programmeerijad saavad alati kasutada makro asemel enum-i. Kuid kogenud programmeerijad kasutavad suuremahuliste tarkvaraarendusprojektide puhul enum makro. See aitab kirjutada puhtaid ja loetavaid programme.