Az enum használata C nyelven

How Use Enum C Language



A C programozási nyelvű enum program az integrál állandó értékek meghatározására szolgál, ami nagyon hasznos a tiszta és olvasható programok írásához. A programozók általában felsorolást használnak a megnevezett integrálállandók meghatározására programjaikban, hogy a szoftver jobban olvasható és karbantartható legyen. Ez a cikk részletesen tárgyalja az enumot.

Szintaxis

enum <Enum típus neve> {
Felsorolás_állandó_elem-1,
Felsorolás_állandó_elem-2,
Felsorolás_állandó_elem-3,
…… .........,
Felsorolás_állandó_elem-n,
};

Az Enumeration_Constant_Element-1 alapértelmezett értéke 0, az Enumeration_Constant_Element-2 értéke 1, az Enumeration_Constant_Element-3 értéke 2, és a Enumeration_Constant_Element-n értéke (n-1).







Mély merülés Enumba

Most, hogy ismerjük a felsorolási típus meghatározásának szintaxisát, nézzünk egy példát:



enumHiba{
IO_ERROR,
DISK_ERROR,
HÁLÓZATI HIBA
};

Mindig az enum kulcsszót kell használni a felsorolás típusának meghatározásához. Tehát, amikor felsorolási típust szeretne meghatározni, előtte az enum kulcsszót kell használnia. Az enum kulcsszó után érvényes azonosítót kell használnia a.



A fenti példában a fordító IO_ERROR-t rendel az integrál értékhez: 0, DISK_ERROR-t az integrál értékhez: 1 és NETWORK_ERROR-t az integrál értékhez: 2. Alapértelmezés szerint az első enum-elem mindig a 0 értéket kapja, a következő Az enum-elem 1 értéket kap, és így tovább.





Ez az alapértelmezett viselkedés szükség esetén megváltoztatható az állandó integrál érték kifejezett hozzárendelésével, az alábbiak szerint:

enumHiba{
IO_ERROR= 2,
DISK_ERROR,
HÁLÓZATI HIBA= 8 ,
PRINT_ERROR
};

Ebben az esetben az IO_ERROR -t a programozó kifejezetten 2 -es értékhez rendeli, a DISK_ERROR -t a 3 -as értékhez a fordító, a NETWORK_ERROR -t a programozó kifejezetten a 8 -as értékhez rendeli, a PRINT_ERROR pedig a következőhöz. integráló értéke az előző enum elemnek NETWORK_ERROR (azaz 9) a fordító által.



Tehát most már érti, hogyan kell definiálni a felhasználó által meghatározott felsorolási típust a C-ben. Lehetséges-e deklarálni egy enum típusú változót (ahogy deklarálhatjuk az egész típusú változót)? Igen, ez az! Az enum változót a következőképpen deklarálhatja:

enumHiba Hw_Error;

Ismét itt az enum a kulcsszó, a hiba az enum típusa, a Hw_Error pedig egy enum változó.

Most az alábbi példákat nézzük, hogy megértsük az enum különféle felhasználási módjait:

  • 1. példa: Alapértelmezett enum definíció használat
  • 2. példa: Egyéni enum definíció használat
  • 3. példa: az enum definíció állandó kifejezést használva
  • 4. példa: enum hatókör

1. példa: Alapértelmezett enum Definíció Használat

Ebben a példában megtanulja, hogyan határozza meg a felsorolás típusát alapértelmezett állandó értékekkel. A fordító gondoskodik az alapértelmezett értékek hozzárendeléséről az enum elemekhez. Az alábbiakban láthatja a példaprogramot és a megfelelő kimenetet.

#befoglalni

/ * Határozza meg az enum típusát */
enumHiba{
IO_ERROR,
DISK_ERROR,
HÁLÓZATI HIBA
};

intfő-()
{
enumHiba Hw_Error; /* Enum változó létrehozása*/

printf ('A Hw_Error beállítása IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása NETWORK_ERROR n');
Hw_Error=HÁLÓZATI HIBA;
printf ('Hw_Error értéke = %d n',Hw_Error);

Visszatérés 0;
}

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

2. példa: Egyéni enum definíció használata

Ebben a példában megtanulhatja, hogyan határozhatja meg a felsorolás típusát egyéni állandó értékkel. Ez a példa segít megérteni azt is, hogyan lehet az egyéni konstansok inicializálását tetszőleges sorrendben elvégezni. Ebben a példában kifejezetten definiáltuk az 1 állandó értékétutcaés 3rdenum elemek (azaz IO_ERROR és NETWORK_ERROR), de kihagytuk a 2 explicit inicializálásátndés 4thelemeket. Most a fordító feladata, hogy az alapértelmezett értékeket a 2 -hez rendeljendés 4thenum elemek (azaz DISK_ERROR és PRINT_ERROR). A DISK_ERROR 3, a PRINT_ERROR pedig 9 értékhez lesz rendelve. Az alábbiakban a példaprogram és a kimenet látható.

#befoglalni

/* Az enum típusának meghatározása - Egyéni inicializálás*/
enumHiba{
IO_ERROR= 2,
DISK_ERROR,
HÁLÓZATI HIBA= 8,
PRINT_ERROR
};

intfő-()
{

/* Enum változó deklarálása*/
enumHiba Hw_Error;

printf ('A Hw_Error beállítása IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása NETWORK_ERROR n');
Hw_Error=HÁLÓZATI HIBA;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

Visszatérés 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhaf4IzqhkN4qF9HcuGZ9thqlKfKfKfKFKKK

3. példa: Enum definíció konstans kifejezés használatával

Ebben a példában megtanulja, hogyan kell használni az állandó kifejezést az enum elemek állandó értékének meghatározásához.

#befoglalni

/* Határozza meg az enum típusát - egyéni inicializálás állandó kifejezés használatával
állandó kifejezést használunk itt:
a. IO_ERROR és
b. HÁLÓZATI HIBA
Ez szokatlan módja az enum elemek meghatározásának; azonban ezt
program bemutatja, hogy az enum elemek ilyen módon történő inicializálása lehetséges a c.
* /


enumHiba{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
HÁLÓZATI HIBA= 2 == 2,
PRINT_ERROR
};

intfő-()
{

/* Enum változó deklarálása*/
enumHiba Hw_Error;

printf ('A Hw_Error beállítása IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása NETWORK_ERROR n');
Hw_Error=HÁLÓZATI HIBA;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

Visszatérés 0;
}

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

4. példa: enum hatókör

Ebben a példában megtudhatja, hogyan működik a hatókör -szabály az enum esetében. Egy MACRO -t (#define) lehetett volna használni egy konstans meghatározására az enum helyett, de a hatókör -szabály nem működik a MACRO esetében.

#befoglalni

intfő-()
{

/ * Határozza meg az enum típusát */
enumHiba_1{
IO_ERROR= 10,
DISK_ERROR,
HÁLÓZATI HIBA= 3,
PRINT_ERROR
};


{

/* Határozza meg az enum típusát a belső hatókörben*/
enumHiba_1{
IO_ERROR= húsz,
DISK_ERROR,
HÁLÓZATI HIBA= 35,
PRINT_ERROR
};

/* Enum változó deklarálása*/
enumHiba_1 Hw_Error;
printf ('A Hw_Error beállítása IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása NETWORK_ERROR n');
Hw_Error=HÁLÓZATI HIBA;
printf ('Hw_Error értéke = %d n',Hw_Error);

printf (' nA Hw_Error beállítása PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hw_Error értéke = %d n',Hw_Error);
}
Visszatérés 0;
}

Az enum és a macro összehasonlítása

Enum Makró
A hatókör szabálya az enumra vonatkozik. A hatókör szabálya nem alkalmazható a makrókra.
Az Enum alapértelmezett hozzárendelése automatikusan történik.

Az Enum nagyon hasznos nagyszámú konstans meghatározásában. A fordító elvégzi az alapértelmezett állandó érték inicializálását.

A makró konstans értékeket a programozónak mindig kifejezetten meg kell említenie.

Ez unalmas folyamat lehet sok konstans esetén, mivel a programozónak mindig manuálisan kell meghatároznia minden állandó értéket, miközben meghatározza a makrót.

Következtetés

A C nyelvű enum program opcionális módszernek tekinthető önálló programok vagy kis méretű projektek esetében, mivel a programozók mindig használhatnak makrót az enum helyett. A tapasztalt programozók azonban hajlamosak enum over makrót használni nagyszabású szoftverfejlesztési projektekhez. Ez segít a tiszta és olvasható programok írásban.