Kaip naudoti „enum“ C kalba

How Use Enum C Language



„Enum“ programa C programavimo kalba naudojama vientisoms pastovioms reikšmėms apibrėžti, o tai labai padeda rašant švarias ir įskaitomas programas. Paprastai programuotojai naudoja surašymą, kad apibrėžtų savo programose integruotas konstantas, kad programinė įranga būtų geriau skaitoma ir prižiūrima. Šiame straipsnyje bus išsamiai aptarta enum.

Sintaksė

enum <Enum tipo pavadinimas> {
Sąrašas_Nuolatinis_Elementas-1,
Sąrašas_Nuolatinis_Elementas-2,
Sąrašas_Nuolatinis_Elementas-3,
…… .........,
Sąrašas_Nuolatinis_Elementas-n,
};

Numatytoji „Enumeration_Constant_Element-1“ vertė yra 0, „Enumeration_Constant_Element-2“ vertė yra 1, „Enumeration_Constant_Element-3“ vertė yra 2, o „Enumeration_Constant_Element-n“ vertė yra (n-1).







Giliai pasinerkite į „Enum“

Dabar, kai žinome surašymo tipo apibrėžimo sintaksę, pažvelkime į pavyzdį:



enumKlaida{
IO_ERROR,
DISK_ERROR,
TINKLO KLAIDA
};

Sąrašo tipui apibrėžti visada turi būti naudojamas raktinis žodis „enum“. Taigi, kai norite apibrėžti surašymo tipą, prieš tai turite naudoti raktinį žodį enum. Po raktinio žodžio „enum“, norėdami apibrėžti, turite naudoti galiojantį identifikatorių.



Anksčiau pateiktame pavyzdyje kompiliatorius integralo reikšmei priskirs IO_ERROR: 0, integralinei vertei-DISK_ERROR: 1, o integralinei-NETWORK_ERROR: 2. Pagal numatytuosius nustatymus pirmajam „enum“ elementui visada priskiriama vertė 0, kitam „enum-element“ priskiriama vertė 1 ir pan.





Jei reikia, šią numatytąją elgseną galima pakeisti, aiškiai priskiriant pastoviąją integralo vertę, taip:

enumKlaida{
IO_ERROR= 2,
DISK_ERROR,
TINKLO KLAIDA= 8 ,
PRINT_ERROR
};

Tokiu atveju programuotojas IO_ERROR aiškiai priskiria 2 reikšmei, kompiliatorius DISK_ERROR - 3, programuotojas NETWORK_ERROR aiškiai priskiria 8 reikšmei, o PRINT_ERROR priskiria kitam neatskiriama ankstesnio „enum“ elemento NETWORK_ERROR (ty 9) vertė, kurią sudarė kompiliatorius.



Taigi, jūs dabar suprantate, kaip C. apibrėžti vartotojo apibrėžtą surašymo tipą. Ar galima deklaruoti „enum“ tipo kintamąjį (kaip galime deklaruoti sveikojo tipo kintamąjį)? Taip tai yra! „Enum“ kintamąjį galite deklaruoti taip:

enumKlaida Hw_Error;

Vėlgi, „enum“ yra raktinis žodis, klaida - „enum“ tipas, o „Hw_Error“ - kintamasis „enum“.

Dabar pažvelgsime į šiuos pavyzdžius, kad suprastume įvairius „enum“ naudojimo būdus:

  • 1 pavyzdys: numatytasis „enum“ apibrėžimo naudojimas
  • 2 pavyzdys: pasirinktinio enum apibrėžimo naudojimas
  • 3 pavyzdys: enum apibrėžimas naudojant pastovią išraišką
  • 4 pavyzdys: enum apimtis

1 pavyzdys: numatytasis enum Apibrėžimas Naudojimas

Šiame pavyzdyje sužinosite, kaip apibrėžti surašymo tipą su numatytosiomis pastoviomis reikšmėmis. Kompiliatorius pasirūpins, kad „enum“ elementams būtų priskirtos numatytosios vertės. Žemiau pamatysite programos pavyzdį ir atitinkamą išvestį.

#įtraukti

/ * Apibrėžkite enum tipą */
enumKlaida{
IO_ERROR,
DISK_ERROR,
TINKLO KLAIDA
};

tarptpagrindinis()
{
enumKlaida Hw_Error; /* Kuriamas „enum“ kintamasis*/

printf („Hw_Error nustatymas į IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į „NETWORK_ERROR“ n');
Hw_Error=TINKLO KLAIDA;
printf ('Hw_Error vertė = %d n',Hw_Error);

grįžti 0;
}

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

2 pavyzdys: pasirinktinio enum apibrėžimo naudojimas

Šiame pavyzdyje sužinosite, kaip apibrėžti surašymo tipą naudojant pasirinktinę pastovią vertę. Be to, šis pavyzdys padės suprasti, kaip galima inicijuoti pasirinktines konstantas bet kokia atsitiktine tvarka. Šiame pavyzdyje mes aiškiai apibrėžėme pastovią reikšmę 1stir 3rdenum elementai (t. y. atitinkamai IO_ERROR ir NETWORK_ERROR), tačiau praleidome aiškų 2 inicijavimąantrair 4tūkstelementai. Dabar kompiliatorius yra atsakingas už numatytųjų reikšmių priskyrimą 2antrair 4tūkstenum elementai (t. y. atitinkamai DISK_ERROR ir PRINT_ERROR). DISK_ERROR bus priskirta 3, o PRINT_ERROR - 9 reikšmei. Žemiau pamatysite programos pavyzdį ir išvestį.

#įtraukti

/* Apibrėžkite „enum“ tipą - pasirinktinis inicijavimas*/
enumKlaida{
IO_ERROR= 2,
DISK_ERROR,
TINKLO KLAIDA= 8,
PRINT_ERROR
};

tarptpagrindinis()
{

/* Skelbti kintamąjį*/
enumKlaida Hw_Error;

printf („Hw_Error nustatymas į IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į „NETWORK_ERROR“ n');
Hw_Error=TINKLO KLAIDA;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

grįžti 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlfffKfKfKFKKK

3 pavyzdys: Enum apibrėžimas naudojant pastovią išraišką

Šiame pavyzdyje sužinosite, kaip naudoti pastovią išraišką, norint apibrėžti pastovią „enum“ elementų vertę.

#įtraukti

/* Apibrėžkite „enum“ tipą - pasirinktinis inicijavimas naudojant pastovią išraišką
čia naudojama nuolatinė išraiška:
a. IO_ERROR ir
b. TINKLO KLAIDA
Tai neįprastas enumo elementų apibrėžimo būdas; tačiau šis
programa parodo, kad toks enum elementų inicijavimo būdas yra įmanomas c.
* /


enumKlaida{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
TINKLO KLAIDA= 2 == 2,
PRINT_ERROR
};

tarptpagrindinis()
{

/* Skelbti kintamąjį*/
enumKlaida Hw_Error;

printf („Hw_Error nustatymas į IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į „NETWORK_ERROR“ n');
Hw_Error=TINKLO KLAIDA;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

grįžti 0;
}

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

4 pavyzdys: enum Apimtis

Šiame pavyzdyje sužinosite, kaip taikymo srities taisyklė veikia „enum“. MACRO (#define) galėjo būti naudojama konstantai apibrėžti vietoj enum, tačiau taikymo srities taisyklė MACRO neveikia.

#įtraukti

tarptpagrindinis()
{

/ * Apibrėžkite enum tipą */
enumKlaida_1{
IO_ERROR= 10,
DISK_ERROR,
TINKLO KLAIDA= 3,
PRINT_ERROR
};


{

/* Apibrėžkite enum tipą vidinėje apimtyje*/
enumKlaida_1{
IO_ERROR= dvidešimt,
DISK_ERROR,
TINKLO KLAIDA= 35,
PRINT_ERROR
};

/* Skelbti kintamąjį*/
enumKlaida_1 „Hw_Error“;
printf („Hw_Error nustatymas į IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į „NETWORK_ERROR“ n');
Hw_Error=TINKLO KLAIDA;
printf ('Hw_Error vertė = %d n',Hw_Error);

printf (' nNustatoma „Hw_Error“ į PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error vertė = %d n',Hw_Error);
}
grįžti 0;
}

Enum ir macro palyginimas

Enum Makro
Taikymo srities taisyklė taikoma „enum“. Taikymo srities taisyklė netaikoma makrokomandoms.
Numatytasis „Enum“ vertės priskyrimas vyksta automatiškai.

„Enum“ labai padeda apibrėžti daugybę konstantų. Kompiliatorius inicijuoja numatytąją pastovios vertės inicijavimą.

Programuotojas visada turi aiškiai nurodyti makrokomandos konstantas.

Daugeliui konstantų tai gali būti varginantis procesas, nes programuotojas visada turi rankiniu būdu apibrėžti kiekvieną pastovią reikšmę nustatydamas makrokomandą.

Išvada

„Enum“ programa C gali būti laikoma neprivalomu atskirų programų ar mažo dydžio projektų metodu, nes programuotojai visada gali naudoti makro, o ne enum. Tačiau patyrę programuotojai didelio masto programinės įrangos kūrimo projektams linkę naudoti „enum over macro“. Tai padeda rašyti švarias ir įskaitomas programas.