Składnia
wyliczenieEnumeration_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:
wyliczenie BłądIO_BŁĄD,
DISK_ERROR,
BŁĄD SIECI
;
Słowo kluczowe „enum” musi być zawsze używane do zdefiniowania typu wyliczenia. Tak więc za każdym razem, gdy chcesz zdefiniować typ wyliczenia, musisz wcześniej użyć słowa kluczowego „enum”
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 pierwszemu elementowi wyliczenia jest zawsze przypisywana wartość 0, następnemu elementowi wyliczenia jest przypisywana wartość 1 itd.
To domyślne zachowanie można w razie potrzeby zmienić, przypisując jawnie stałą wartość całkowitą w następujący sposób:
wyliczenie BłądIO_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 (i.mi., 9) przez kompilator.
Więc 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:
wyliczenie Błąd Hw_Error;Ponownie „wyliczenie” to słowo kluczowe, „Błąd” to typ wyliczenia, a „Hw_Error” to zmienna wyliczeniowa.
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.
#zawierać/* Zdefiniuj typ wyliczenia */
wyliczenie Błąd
IO_BŁĄD,
DISK_ERROR,
BŁĄD SIECI
;
int main()
wyliczenie Błąd Hw_Error; /* Tworzenie zmiennej wyliczeniowej*/
printf("Ustawianie Hw_Error na IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na DISK_ERROR\n");
Hw_Error = DYSK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na NETWORK_ERROR\n");
Hw_Error = BŁĄD_SIECI;
printf("Wartość Hw_Error = %d \n",Hw_Error);
zwróć 0;
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 Ci również zrozumieć, w jaki sposób można wykonać inicjalizację stałych niestandardowych w dowolnej losowej kolejności. W tym przykładzie wyraźnie zdefiniowaliśmy stałą wartość dla 1st i 3r & D wyliczenie elementów (i.mi., IO_ERROR i NETWORK_ERROR), ale pominęliśmy jawną inicjalizację dla 2znaleźć i 4ten elementy. Teraz obowiązkiem kompilatora jest przypisanie wartości domyślnych do 2znaleźć i 4ten wyliczenie elementów (i.mi., DISK_ERROR i PRINT_ERROR, odpowiednio). DISK_ERROR zostanie przypisany do wartości 3 a PRINT_ERROR zostanie przypisany do wartości 9. Poniżej zobaczysz przykładowy program i wyjście.
#zawierać/* Zdefiniuj typ wyliczenia - Inicjalizacja niestandardowa*/
wyliczenie Błąd
IO_BŁĄD = 2,
DISK_ERROR,
BŁĄD_SIECI = 8,
PRINT_ERROR
;
int main()
/* Zadeklaruj zmienną wyliczeniową*/
wyliczenie Błąd Hw_Error;
printf("Ustawianie Hw_Error na IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na DISK_ERROR\n");
Hw_Error = DYSK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na NETWORK_ERROR\n");
Hw_Error = BŁĄD_SIECI;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na PRINT_ERROR\n");
Hw_Błąd = WYDRUK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
zwróć 0;
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.
#zawierać/* Zdefiniuj typ wyliczenia - niestandardowa inicjalizacja za pomocą wyrażenia stałego
wyrażenie stałe jest tutaj używane w przypadku :
za. IO_ERROR i
b. BŁĄD SIECI
Jest to niezwykły sposób definiowania elementów wyliczenia; jednak to
program pokazuje, że ten sposób inicjalizacji elementów wyliczenia jest możliwy w c.
*/
wyliczenie Błąd
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
BŁĄD_SIECI = 2 == 2,
PRINT_ERROR
;
int main()
/* Zadeklaruj zmienną wyliczeniową*/
wyliczenie Błąd Hw_Error;
printf("Ustawianie Hw_Error na IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na DISK_ERROR\n");
Hw_Error = DYSK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na NETWORK_ERROR\n");
Hw_Error = BŁĄD_SIECI;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na PRINT_ERROR\n");
Hw_Błąd = WYDRUK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
zwróć 0;
Przykład 4: wyliczenie Zakres
W tym przykładzie dowiesz się, jak działa reguła określania zakresu dla enum. MAKRO (#define) mogło zostać użyte do zdefiniowania stałej zamiast wyliczenia, ale reguła zakresu nie działa dla MAKRO.
#zawieraćint main()
/* Zdefiniuj typ wyliczenia */
wyliczenie Błąd_1
IO_BŁĄD = 10,
DISK_ERROR,
BŁĄD_SIECI = 3,
PRINT_ERROR
;
/* Zdefiniuj typ wyliczenia w wewnętrznym zakresie*/
wyliczenie Błąd_1
IO_BŁĄD = 20,
DISK_ERROR,
BŁĄD_SIECI = 35,
PRINT_ERROR
;
/* Zadeklaruj zmienną wyliczeniową*/
wyliczenie Error_1 Hw_Error;
printf("Ustawianie Hw_Error na IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na DISK_ERROR\n");
Hw_Error = DYSK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na NETWORK_ERROR\n");
Hw_Error = BŁĄD_SIECI;
printf("Wartość Hw_Error = %d \n",Hw_Error);
printf("\nUstawianie Hw_Error na PRINT_ERROR\n");
Hw_Błąd = WYDRUK_BŁĄD;
printf("Wartość Hw_Error = %d \n",Hw_Error);
zwróć 0;
Porównanie między wyliczeniem a makro
Wyliczenie | Makro |
Reguła określania zakresu ma zastosowanie do wyliczenia. | Zasada określania zakresu nie ma zastosowania do makro for. |
Domyślne przypisanie wartości Enum odbywa się automatycznie. Enum jest bardzo pomocne przy definiowaniu dużej liczby stałych. Kompilator przyjmuje domyślną inicjalizację wartości stałej. | Wartości makrostałych 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ą stałą wartość podczas definiowania Makro. |
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.