Jak używać enum w języku C

How Use Enum C Language



Program enum w języku programowania C służy do definiowania wartości stałych całkowych, co jest bardzo pomocne przy pisaniu czystych i czytelnych programów. Programiści zwykle używają wyliczenia do definiowania nazwanych stałych integralnych w swoich programach, aby zapewnić lepszą czytelność i łatwość konserwacji oprogramowania. W tym artykule szczegółowo omówimy enum.

Składnia

wyliczenie <Nazwa typu wyliczenia> {
Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
……..........,
Enumeration_Constant_Element-n,
};

Wartość domyślna Enumeration_Constant_Element-1 to 0, wartość Enumeration_Constant_Element-2 to 1, wartość Enumeration_Constant_Element-3 to 2, a wartość Enumeration_Constant_Element-n to (n-1).







Zanurz się głęboko w Enum

Teraz, ponieważ znamy składnię określającą typ wyliczenia, spójrzmy na przykład:



wyliczenieBłąd{
IO_BŁĄD,
DISK_ERROR,
BŁĄD SIECI
};

Słowo kluczowe enum musi być zawsze używane do definiowania typu wyliczenia. Tak więc za każdym razem, gdy chcesz zdefiniować typ wyliczenia, musisz użyć słowa kluczowego enum przed . Po słowie kluczowym enum należy użyć prawidłowego identyfikatora, aby zdefiniować .



W powyższym przykładzie kompilator przypisze IO_ERROR do wartości całkowitej: 0, DISK_ERROR do wartości całkowitej: 1 i NETWORK_ERROR do wartości całkowitej: 2. Domyślnie pierwszy element wyliczenia ma zawsze wartość 0, następny element-wyliczenia ma przypisaną wartość 1 i tak dalej.





To domyślne zachowanie można w razie potrzeby zmienić, przypisując jawnie stałą wartość całkowitą w następujący sposób:

wyliczenieBłąd{
IO_BŁĄD= 2,
DISK_ERROR,
BŁĄD SIECI= 8 ,
PRINT_ERROR
};

W tym przypadku IO_ERROR jest jawnie przypisywany przez programistę do wartości 2, DISK_ERROR jest przypisywany do wartości 3 przez kompilator, NETWORK_ERROR jest jawnie przypisywany do wartości 8 przez programistę, a PRINT_ERROR jest przypisywany do następnego wartość całkowita poprzedniego elementu wyliczenia NETWORK_ERROR (tj. 9) przez kompilator.



Teraz rozumiesz, jak zdefiniować typ wyliczenia zdefiniowany przez użytkownika w C. Czy można zadeklarować zmienną typu enum (ponieważ możemy zadeklarować zmienną typu integer)? Tak to jest! Możesz zadeklarować zmienną enum w następujący sposób:

wyliczenieBłąd Hw_Error;

Ponownie enum jest tutaj słowem kluczowym, Error jest typem enum, a Hw_Error jest zmienną enum.

Przyjrzymy się teraz następującym przykładom, aby zrozumieć różne zastosowania enum:

  • Przykład 1: Domyślne użycie definicji wyliczenia
  • Przykład 2: Użycie niestandardowej definicji wyliczenia
  • Przykład 3: definicja wyliczenia przy użyciu wyrażenia stałego
  • Przykład 4: zakres wyliczenia

Przykład 1: Domyślne wyliczenie Definicja Użycie

W tym przykładzie dowiesz się, jak zdefiniować typ wyliczenia z domyślnymi wartościami stałymi. Kompilator zadba o przypisanie domyślnych wartości do elementów enum. Poniżej zobaczysz przykładowy program i odpowiadające mu wyjście.

#włączać

/* Zdefiniuj typ wyliczenia */
wyliczenieBłąd{
IO_BŁĄD,
DISK_ERROR,
BŁĄD SIECI
};

intGłówny()
{
wyliczenieBłąd Hw_Error; /* Tworzenie zmiennej wyliczeniowej*/

printf ('Ustawianie Hw_Error na IO_ERROR ');
Hw_Błąd=IO_BŁĄD;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na DISK_ERROR ');
Hw_Błąd=DISK_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na NETWORK_ERROR ');
Hw_Błąd=BŁĄD SIECI;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

powrót 0;
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBWoiMOhzApzXey4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBVoiMOhzAQPzXey4

Przykład 2: Niestandardowe użycie definicji wyliczenia

W tym przykładzie dowiesz się, jak zdefiniować typ wyliczenia za pomocą niestandardowej wartości stałej. Ten przykład pomoże również zrozumieć, w jaki sposób można wykonać inicjalizację stałych niestandardowych w dowolnej kolejności losowej. W tym przykładzie wyraźnie zdefiniowaliśmy stałą wartość dla 1NSi 3r & Delementy wyliczenia (tj. odpowiednio IO_ERROR i NETWORK_ERROR), ale pominęliśmy jawną inicjalizację dla 2NSi 4NSelementy. Teraz obowiązkiem kompilatora jest przypisanie wartości domyślnych do 2NSi 4NSelementy wyliczenia (tj. odpowiednio DISK_ERROR i PRINT_ERROR). DISK_ERROR zostanie przypisany do wartości 3, a PRINT_ERROR do wartości 9. Poniżej zobaczysz przykładowy program i wyjście.

#włączać

/* Zdefiniuj typ wyliczenia - Inicjalizacja niestandardowa*/
wyliczenieBłąd{
IO_BŁĄD= 2,
DISK_ERROR,
BŁĄD SIECI= 8,
PRINT_ERROR
};

intGłówny()
{

/* Zadeklaruj zmienną wyliczeniową*/
wyliczenieBłąd Hw_Error;

printf ('Ustawianie Hw_Error na IO_ERROR ');
Hw_Błąd=IO_BŁĄD;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na DISK_ERROR ');
Hw_Błąd=DISK_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na NETWORK_ERROR ');
Hw_Błąd=BŁĄD SIECI;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na PRINT_ERROR ');
Hw_Błąd=PRINT_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

powrót 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLy6wzxvjl9F

Przykład 3: Definicja wyliczenia przy użyciu wyrażenia stałego

W tym przykładzie dowiesz się, jak używać wyrażenia stałego do definiowania stałej wartości elementów wyliczenia.

#włączać

/* Zdefiniuj typ wyliczenia - niestandardowa inicjalizacja za pomocą wyrażenia stałego
wyrażenie stałe jest tutaj używane w przypadku :
a. IO_ERROR i
b. BŁĄD SIECI
Jest to nietypowy sposób definiowania elementów wyliczenia; jednak to
program pokazuje, że ten sposób inicjalizacji elementów wyliczenia jest możliwy w c.
* /


wyliczenieBłąd{
IO_BŁĄD= 1 + 2 * 3 + 4,
DISK_ERROR,
BŁĄD SIECI= 2 == 2,
PRINT_ERROR
};

intGłówny()
{

/* Zadeklaruj zmienną wyliczeniową*/
wyliczenieBłąd Hw_Error;

printf ('Ustawianie Hw_Error na IO_ERROR ');
Hw_Błąd=IO_BŁĄD;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na DISK_ERROR ');
Hw_Błąd=DISK_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na NETWORK_ERROR ');
Hw_Błąd=BŁĄD SIECI;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na PRINT_ERROR ');
Hw_Błąd=PRINT_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

powrót 0;
}

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

Przykład 4: wyliczenie Zakres

W tym przykładzie dowiesz się, jak działa reguła określania zakresu dla wyliczenia. MAKRO (#define) mogło zostać użyte do zdefiniowania stałej zamiast wyliczenia, ale reguła określania zakresu nie działa dla MAKRO.

#włączać

intGłówny()
{

/* Zdefiniuj typ wyliczenia */
wyliczenieBłąd_1{
IO_BŁĄD= 10,
DISK_ERROR,
BŁĄD SIECI= 3,
PRINT_ERROR
};


{

/* Zdefiniuj typ wyliczenia w wewnętrznym zakresie*/
wyliczenieBłąd_1{
IO_BŁĄD= 20,
DISK_ERROR,
BŁĄD SIECI= 35,
PRINT_ERROR
};

/* Zadeklaruj zmienną wyliczeniową*/
wyliczenieBłąd_1 Hw_Error;
printf ('Ustawianie Hw_Error na IO_ERROR ');
Hw_Błąd=IO_BŁĄD;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na DISK_ERROR ');
Hw_Błąd=DISK_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na NETWORK_ERROR ');
Hw_Błąd=BŁĄD SIECI;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);

printf (' Ustawienie Hw_Error na PRINT_ERROR ');
Hw_Błąd=PRINT_ERROR;
printf ('Wartość Hw_Error = %d ',Hw_Błąd);
}
powrót 0;
}

Porównanie między wyliczeniem a makro

Wyliczenie Makro
Reguła określania zakresu ma zastosowanie do wyliczenia. Zasada określania zakresu nie dotyczy makr.
Domyślne przypisanie wartości Enum odbywa się automatycznie.

Enum jest bardzo pomocne w definiowaniu dużej liczby stałych. Kompilator przyjmuje domyślną inicjalizację wartości stałej.

Wartości stałych makr muszą być zawsze wyraźnie wymienione przez programistę.

Może to być żmudny proces dla dużej liczby stałych, ponieważ programista musi zawsze ręcznie definiować każdą wartość stałej podczas definiowania makra.

Wniosek

Program enum w C może być uważany za opcjonalną metodę dla samodzielnych programów lub małych projektów, ponieważ programiści zawsze mogą używać makra zamiast enum. Jednak doświadczeni programiści mają tendencję do używania wyliczenia zamiast makra w projektach programistycznych na dużą skalę. Pomaga to w pisaniu czystych i czytelnych programów.