Szintaxis
enumFelsorolás_Konstant_Element-1,
Felsorolás_Általános_Element-2,
Felsorolás_Konstant_Element-3,
… ,
Felsorolás_állandó_Element-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, az Enumeration_Constant_Element-n értéke (n-1).
Mély merülés az Enumba
Most, hogy ismerjük a felsorolás típusának meghatározásához szükséges szintaxist, nézzünk meg egy példát:
enum ErrorIO_ERROR,
DISK_ERROR,
HÁLÓZATI HIBA
;
A felsorolás típusának meghatározásához mindig az „enum” kulcsszót kell használni. Tehát, amikor felsorolási típust akar megadni, akkor az „enum” kulcsszót kell használnia
A fenti példában a fordító az IO_ERROR értéket hozzárendeli az integrálértékhez: 0, a DISK_ERROR az integrálértékhez: 1 és a NETWORK_ERROR az integrálértékhez: 2. Alapértelmezés szerint az első enum elemhez mindig 0 értéket rendelnek, a következő enum elemhez 1 értéket rendelnek, é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:
enum ErrorIO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8 ,
PRINT_ERROR
;
Ebben az esetben az IO_ERROR-ot a programozó kifejezetten 2-es értékhez rendeli, a DISK_ERROR-t a fordító 3-as értékhez rendeli, a NETWORK_ERROR-ot a programozó kifejezetten a 8-as értékhez, a PRINT_ERROR pedig a következő az előző enum elem integrált értéke NETWORK_ERROR (i.e., 9) a fordító.
Tehát most már megértette, hogyan definiálható a felhasználó által definiált felsorolási típus C-ben. Lehetséges-e deklarálni egy enum típusú változót (mivel deklarálhatunk egy egész típusú változót)? Igen, ez az! Az enum változót a következőképpen deklarálhatja:
enum Error Hw_Error;Ismét „enum” a kulcsszó itt, a „Error” az enum típus, a „Hw_Error” pedig egy enum változó.
Most a következő példákat vesszük szemügyre, hogy megértsük az enum különféle felhasználásait:
- 1. példa: Alapértelmezett enum definícióhasználat
- 2. példa: Egyéni enum definícióhasználat
- 3. példa: Enum definíció állandó kifejezés használatával
- 4. példa: enum hatókör
1. példa: Alapértelmezett összesítés Definíció Használat
Ebben a példában megtudhatja, hogyan definiálhatja a felsorolás típusát az 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élda programot és a hozzá tartozó kimenetet.
#include/ * Adja meg az enum típusát * /
enum Error
IO_ERROR,
DISK_ERROR,
HÁLÓZATI HIBA
;
int main ()
enum Error Hw_Error; / * Enum változó létrehozása * /
printf ("A Hw_Error beállítása IO_ERROR értékre \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása DISK_ERROR értékre \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása NETWORK_ERROR értékre \ n");
Hw_Error = NETWORK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
visszatér 0;
2. példa: Egyéni enum Definition Használat
Ebben a példában megtudhatja, hogyan definiálhatja a felsorolás típusát egy egyedi állandó értékkel. Ez a példa segít megérteni, hogyan lehet az egyéni állandókat inicializálni bármilyen véletlenszerű sorrendben. Ebben a példában kifejezetten meghatároztuk az 1 állandó értékétutca és 3rd enum elemek (i.e., IO_ERROR és NETWORK_ERROR), de kihagytuk a 2nd és 4th elemek. Most a fordító feladata, hogy az alapértelmezett értékeket hozzárendelje a 2-heznd és 4th enum elemek (i.e., DISK_ERROR és PRINT_ERROR). A DISK_ERROR értéke 3, a PRINT_ERROR értéke pedig 9 lesz. Az alábbiakban láthatja a példa programot és a kimenetet.
#include/ * Adja meg a felsorolás típusát - Egyéni inicializálás * /
enum Error
IO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8,
PRINT_ERROR
;
int main ()
/ * Enum változó deklarálása * /
enum Error Hw_Error;
printf ("A Hw_Error beállítása IO_ERROR értékre \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása DISK_ERROR értékre \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása NETWORK_ERROR értékre \ n");
Hw_Error = NETWORK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása PRINT_ERROR értékre \ n");
Hw_Error = PRINT_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
visszatér 0;
3. példa: Enum definíció állandó kifejezés használatával
Ebben a példában megtudhatja, hogyan használhatja a konstans kifejezést az enum elemek állandó értékének meghatározásához.
#include/ * Adja 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ódon határozza meg az enum elemeket; ez azonban
program bemutatja, hogy az enum elemek inicializálásának ilyen módja lehetséges a c.
* /
enum Error
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
NETWORK_ERROR = 2 == 2,
PRINT_ERROR
;
int main ()
/ * Enum változó deklarálása * /
enum Error Hw_Error;
printf ("A Hw_Error beállítása IO_ERROR értékre \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása DISK_ERROR értékre \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása NETWORK_ERROR értékre \ n");
Hw_Error = NETWORK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása PRINT_ERROR értékre \ n");
Hw_Error = PRINT_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
visszatér 0;
4. példa: Enum hatókör
Ebben a példában megtudhatja, hogyan működik a hatókörszabály az enum számára. A konstans definiálására egy MACRO (#define) használható volna az enum helyett, de a hatókörszabály nem működik a MACRO esetében.
#includeint main ()
/ * Adja meg az enum típusát * /
enum Error_1
IO_ERROR = 10,
DISK_ERROR,
NETWORK_ERROR = 3,
PRINT_ERROR
;
/ * Határozza meg az enum típusát a belső hatókörben * /
enum Error_1
IO_ERROR = 20,
DISK_ERROR,
NETWORK_ERROR = 35,
PRINT_ERROR
;
/ * Enum változó deklarálása * /
enum Error_1 Hw_Error;
printf ("A Hw_Error beállítása IO_ERROR értékre \ n");
Hw_Error = IO_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása DISK_ERROR értékre \ n");
Hw_Error = DISK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása NETWORK_ERROR értékre \ n");
Hw_Error = NETWORK_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
printf ("\ nA Hw_Error beállítása PRINT_ERROR értékre \ n");
Hw_Error = PRINT_ERROR;
printf ("Hw_Error értéke =% d \ n", Hw_Error);
visszatér 0;
Összehasonlítás az enum és a makró között
Enum | Makró |
A hatókörre vonatkozó szabály alkalmazható az enum esetében. | A hatókörszabály nem alkalmazható makróra. |
Az alapértelmezett Enum érték hozzárendelés automatikusan megtörténik. Az Enum nagyon segít meghatározni az állandók nagy számát. A fordító elvégzi az alapértelmezett állandó érték inicializálását. | A programozónak mindig kifejezetten meg kell említenie a makroállandó értékeket. Ez fárasztó folyamat lehet sok konstans számára, mivel a programozónak mindig kézzel kell meghatároznia az egyes állandó értékeket, miközben meghatározza a makrót. |
Következtetés
A C-ben szereplő enum program opcionális módszernek tekinthető önálló programok vagy kis méretű projektek számára, mivel a programozók mindig makrót használhatnak enum helyett. A tapasztalt programozók azonban nagyszabású szoftverfejlesztési projektekben általában az enum helyett a makrot használják. Ez segít a tiszta és olvasható programok írásában.