Како се користи енум у Ц језику

How Use Enum C Language



Програм енум у програмском језику Ц се користи за дефинисање интегралних константних вредности, што је од велике помоћи при писању чистих и читљивих програма. Програмери обично користе набрајање да дефинишу именоване интегралне константе у својим програмима како би обезбедили бољу читљивост и одржавање софтвера. У овом чланку ће се детаљно говорити о енуму.

Синтакса

енум <Име врсте енума> {
Енумератион_Цонстант_Елемент-1,
Енумератион_Цонстант_Елемент-2,
Енумератион_Цонстант_Елемент-3,
…… .........,
Енумератион_Цонстант_Елемент-н,
};

Подразумевана вредност Енумератион_Цонстант_Елемент-1 је 0, вредност Енумератион_Цонстант_Елемент-2 је 1, вредност Енумератион_Цонстант_Елемент-3 је 2, а вредност Енумератион_Цонстант_Елемент-н је (н-1).







Уроните дубоко у Енум

Сада, пошто знамо синтаксу за дефинисање типа набрајања, погледајмо пример:



енумГрешка{
ИО_ЕРРОР,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР
};

Кључна реч енум увек мора да се користи за дефинисање типа пописивања. Дакле, кад год желите да дефинишете тип пописивања, морате претходно да користите кључну реч енум. После кључне речи енум, морате да употребите важећи идентификатор да бисте дефинисали.



У горњем примеру, компајлер ће доделити ИО_ЕРРОР интегралној вредности: 0, ДИСК_ЕРРОР интегралној вредности: 1 и НЕТВОРК_ЕРРОР интегралној вредности: 2. Подразумевано је првом енум-елементу увек додељена вредност 0, следећем енум-елементу се додељује вредност 1, и тако даље.





Ово подразумевано понашање се може променити ако је потребно тако што се експлицитно додели константна интегрална вредност, на следећи начин:

енумГрешка{
ИО_ЕРРОР= 2,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР= 8 ,
ПРИНТ_ЕРРОР
};

У овом случају, програмер изричито додељује ИО_ЕРРОР вредности 2, компајлер ДИСК_ЕРРОР додељује вредности 3, програмер НЕТВОРК_ЕРРОР експлицитно додељује вредности 8, а следећој ПРИНТ_ЕРРОР интегрална вредност претходног елемента набрајања НЕТВОРК_ЕРРОР (тј. 9) од стране компајлера.



Дакле, сада разумете како да дефинишете кориснички дефинисан тип пописивања у Ц. Да ли је могуће прогласити променљиву типа енум (као што можемо прогласити променљиву целобројног типа)? Да, јесте! Можете прогласити променљиву енум на следећи начин:

енумГрешка Хв_Еррор;

Опет, енум је кључна реч овде, Еррор је тип енума, а Хв_Еррор је променљива набрајања.

Сада ћемо погледати следеће примере да бисмо разумели различите употребе енума:

  • Пример 1: Употреба подразумеване дефиниције набрајања
  • Пример 2: Употреба прилагођене дефиниције набрајања
  • Пример 3: дефиниција набрајања помоћу константног израза
  • Пример 4: опсег енума

Пример 1: Употреба подразумеване енуме дефиниције

У овом примеру ћете научити како да дефинишете тип пописивања са подразумеваним вредностима константе. Преводилац ће се побринути за додељивање подразумеваних вредности елементима енум. Испод ћете видети пример програма и одговарајући излаз.

#инцлуде

/ * Дефинишите тип енума */
енумГрешка{
ИО_ЕРРОР,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР
};

интглавни()
{
енумГрешка Хв_Еррор; /* Креирање енум променљиве*/

принтф ('Постављање Хв_Еррор на ИО_ЕРРОР н');
Хв_Еррор=ИО_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на ДИСК_ЕРРОР н');
Хв_Еррор=ДИСК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на НЕТВОРК_ЕРРОР н');
Хв_Еррор=НЕТВОРК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

повратак 0;
}

хттпс://лх6.гооглеусерцонтент.цом/0ЦХтУккуИА-окДЕПИ0_5фЗЛУ6лЗ6Екз6ДК4уУр63к5Рос863екЦ-ХмрвЗ_ЛЗБКбЕвкеЦВМЦснвКСКСхфрИЈрБаккфЗБВоиМОхзАпзКсеи4уУр63к5Рос863екЦ-ХмрвЗ_ЛЗБКбЕвкеЦВМЦснвКСКСхфрИЈрБаккфЗБВоиМОхзАКПзКсеи4

Пример 2: Употреба дефиниције прилагођеног енума

У овом примеру ћете научити како да дефинишете тип пописивања са прилагођеном константном вредношћу. Такође, овај пример ће вам помоћи да разумете како се иницијализација прилагођених константи може извршити насумичним редоследом. У овом примеру, експлицитно смо дефинисали константну вредност за 1сти 3рденум елементи (тј. ИО_ЕРРОР и НЕТВОРК_ЕРРОР), али смо прескочили експлицитну иницијализацију за 2нди 4тхелементи. Сада је одговорност компајлера да додијели задане вриједности 2нди 4тхенум елементи (тј. ДИСК_ЕРРОР и ПРИНТ_ЕРРОР, респективно). ДИСК_ЕРРОР ће бити додељен вредности 3, а ПРИНТ_ЕРРОР ће бити додељен вредности 9. Испод ћете видети пример програма и излаз.

#инцлуде

/* Дефинишите тип енума - Прилагођена иницијализација*/
енумГрешка{
ИО_ЕРРОР= 2,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР= 8,
ПРИНТ_ЕРРОР
};

интглавни()
{

/* Прогласи променљиву набрајања*/
енумГрешка Хв_Еррор;

принтф ('Постављање Хв_Еррор на ИО_ЕРРОР н');
Хв_Еррор=ИО_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на ДИСК_ЕРРОР н');
Хв_Еррор=ДИСК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на НЕТВОРК_ЕРРОР н');
Хв_Еррор=НЕТВОРК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПодешавање Хв_Еррор на ПРИНТ_ЕРРОР н');
Хв_Еррор=ПРИНТ_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

повратак 0;
}

хттпс://лх6.гооглеусерцонтент.цом/хКтв00Хј7иПннлНхЦ7му1в7хзПхБ64Ц9ниХвјБ6оКгиЦиЕвОгиЛСИВДОквКЦДрхумн4ИзкхкН4кФ9ХцуГЗ9тхклБЛи6вк

Пример 3: Дефиниција набрајања помоћу константног израза

У овом примеру ћете научити како да користите константни израз за дефинисање константне вредности за елементе енума.

#инцлуде

/* Дефинишите тип енума - прилагођена иницијализација помоћу константног израза
овде се користи константан израз у случају:
а. ИО_ЕРРОР и
б. НЕТВОРК_ЕРРОР
Ово је необичан начин дефинисања елемената набрајања; међутим, ово
програм показује да је овај начин иницијализације елемената набрајања могућ у ц.
* /


енумГрешка{
ИО_ЕРРОР= 1 + 2 * 3 + 4,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР= 2 == 2,
ПРИНТ_ЕРРОР
};

интглавни()
{

/* Прогласи променљиву набрајања*/
енумГрешка Хв_Еррор;

принтф ('Постављање Хв_Еррор на ИО_ЕРРОР н');
Хв_Еррор=ИО_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на ДИСК_ЕРРОР н');
Хв_Еррор=ДИСК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на НЕТВОРК_ЕРРОР н');
Хв_Еррор=НЕТВОРК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПодешавање Хв_Еррор на ПРИНТ_ЕРРОР н');
Хв_Еррор=ПРИНТ_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

повратак 0;
}

хттпс://лх4.гооглеусерцонтент.цом/9ФАбПОнМ95ЛиП_УКвг40оХСВ4св34акпФгасбХМии06З_рКЕом81ТуМЦВсфкВаЗедтКОМЕКк7еф_5кЕфРВцНрУвхитДзОцДцОц4цвцццц4ц4ц8ц8ц6ц6ц6ц6ц6ц8ц8ц8ц6ц8ц8ц8ц2ц2ц2ц6ц8цц6ц9ц8ц9ец6ец9ц8ееееееееееееееееееееееееееееееееееееееееееееееееее

Пример 4: енум Сцопе

У овом примеру ћете научити како правило опсега функционише за енум. МАЦРО (#дефине) се могао користити за дефинисање константе уместо набрајања, али правило опсега не ради за МАЦРО.

#инцлуде

интглавни()
{

/ * Дефинишите тип енума */
енумГрешка_1{
ИО_ЕРРОР= 10,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР= 3,
ПРИНТ_ЕРРОР
};


{

/* Дефинишите тип енума у ​​унутрашњем опсегу*/
енумГрешка_1{
ИО_ЕРРОР= двадесет,
ДИСК_ЕРРОР,
НЕТВОРК_ЕРРОР= 35,
ПРИНТ_ЕРРОР
};

/* Прогласи променљиву набрајања*/
енумГрешка_1 Хв_Еррор;
принтф ('Постављање Хв_Еррор на ИО_ЕРРОР н');
Хв_Еррор=ИО_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на ДИСК_ЕРРОР н');
Хв_Еррор=ДИСК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПостављање Хв_Еррор на НЕТВОРК_ЕРРОР н');
Хв_Еррор=НЕТВОРК_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);

принтф (' нПодешавање Хв_Еррор на ПРИНТ_ЕРРОР н');
Хв_Еррор=ПРИНТ_ЕРРОР;
принтф ('Вредност Хв_Еррор = %д н',Хв_Еррор);
}
повратак 0;
}

Поређење између енума и макроа

Енум Макро
Правило опсега применљиво је на енум. Правило опсега није применљиво за макро.
Подразумевано додељивање вредности енума се дешава аутоматски.

Енум је од велике помоћи при дефинисању великог броја константи. Преводилац преузима подразумевану иницијализацију константне вредности.

Вредности макро константе програмер мора увек експлицитно навести програмер.

Ово би могао бити досадан процес за велики број константи јер програмер мора увек ручно дефинисати сваку константну вредност док дефинише макро.

Закључак

Програм набрајања у језику Ц могао би се сматрати опционалном методом за самосталне програме или пројекте мале величине јер програмери увек могу да користе макро уместо набрајања. Међутим, искусни програмери обично користе енум овер мацро за велике пројекте развоја софтвера. Ово помаже у писању чистих и читљивих програма.