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;
}
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;
}
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;
}
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.
#befoglalniintfő-()
{
/ * 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.