Wartości enumów i zakresy
Będzie Pan/Pani kontrolować bazowe liczby całkowite.
Wartości enumów i zakresy to bezpłatna lekcja C Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.
Przypisywanie jawnych wartości
Nie są Państwo ograniczeni do domyślnej sekwencji 0, 1, 2. Za pomocą = można przypisać dowolną liczbę całkowitą do danej nazwy.
Jest to przydatne, gdy liczby muszą odpowiadać zewnętrznemu systemowi, na przykład kodom statusu HTTP.
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };Wyświetlanie własnych wartości
Po przypisaniu przechowywane i wyświetlane są dokładnie te liczby.
W tym przykładzie nazwy enum są bezpośrednio mapowane na standardowe kody HTTP.
#include <stdio.h>
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };
int main(void) {
printf("%d %d\n", OK, NOT_FOUND);
return 0;
}Łączenie wartości jawnych i domyślnych
Jeśli ustawią Państwo niektóre wartości, a pozostałe pozostawią puste, każda pusta nazwa będzie kontynuować numerację od poprzedniej wartości.
Dlatego nazwa występująca bezpośrednio po = 10 otrzyma wartość 11, następna 12 i tak dalej.
#include <stdio.h>
enum N { A = 10, B, C, D = 100, E };
int main(void) {
printf("%d %d %d %d %d\n", A, B, C, D, E);
return 0;
}Rozpoczynanie od jedynki
Popularnym sposobem jest ustawienie pierwszej wartości na 1 zamiast 0, aby numeracja odpowiadała liczeniu używanemu przez ludzi.
W tym przykładzie MON ma wartość 1, więc dni są ponumerowane od 1 do 7.
#include <stdio.h>
enum Day { MON = 1, TUE, WED, THU, FRI, SAT, SUN };
int main(void) {
printf("%d %d\n", MON, SUN);
return 0;
}Zduplikowane wartości są dozwolone
Dwie nazwy enum mogą mieć tę samą wartość całkowitą. C nie wymaga ich unikatowości.
Czasami wykorzystuje się to do tworzenia aliasów dla tego samego pojęcia.
#include <stdio.h>
enum Color { RED = 1, CRIMSON = 1, BLUE = 2 };
int main(void) {
printf("%d %d\n", RED, CRIMSON);
return 0;
}Wartości ujemne
Wartości enum mogą być również ujemne. Są to liczby całkowite ze znakiem.
Pozwala to wyrażać kody błędów poniżej zera obok zakresu neutralnego lub dodatniego.
#include <stdio.h>
enum Temp { COLD = -1, NORMAL = 0, HOT = 1 };
int main(void) {
printf("%d %d %d\n", COLD, NORMAL, HOT);
return 0;
}Sposób z wartownikiem COUNT
Jeśli lista elementów zaczyna się od 0 i zostanie uzupełniona końcową nazwą, ta ostatnia nazwa będzie równa liczbie elementów.
Ten sposób z użyciem COUNT automatycznie podaje rozmiar, nawet po dodaniu nowych elementów.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
printf("%d fruits\n", FRUIT_COUNT);
return 0;
}Enum jako indeksy tablicy
Ponieważ wartości enum są liczbami całkowitymi, świetnie nadają się na indeksy tablic.
W połączeniu ze sposobem z COUNT można dokładnie określić rozmiar tablicy i indeksować ją za pomocą czytelnych nazw.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
int stock[FRUIT_COUNT] = {5, 3, 8};
printf("%d\n", stock[PEAR]);
return 0;
}Typ bazowy
W standardowym C wartości enum są przechowywane w typie całkowitym wybranym przez kompilator, zazwyczaj int.
Typ jest wystarczająco szeroki, aby pomieścić każdą zdefiniowaną wartość, dlatego mieszczą się w nim także duże i ujemne stałe.
#include <stdio.h>
enum Big { SMALL = 0, LARGE = 1000000 };
int main(void) {
printf("%d\n", LARGE);
return 0;
}Brak wbudowanego sprawdzania zakresu
C nie powstrzymuje przed przypisaniem do zmiennej enum wartości spoza zdefiniowanej listy.
Poniższe przypisanie skompiluje się i uruchomi. Odpowiedzialność za utrzymanie poprawnych wartości spoczywa na Państwu.
#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
enum Level x = 99;
printf("%d\n", x);
return 0;
}Iterowanie po zakresie
Gdy enum ma wartości od 0 do wartownika COUNT, można przejść po wszystkich wartościach za pomocą prostej pętli for.
Iteruje ona po każdym zdefiniowanym elemencie aż do wartości count, ale bez niej.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
for (int f = APPLE; f < FRUIT_COUNT; f++)
printf("%d ", f);
printf("\n");
return 0;
}Szybkie sprawdzenie
Proszę przeanalizować mieszane wartości enum.
Podsumowanie
Można przypisywać enum jawne wartości, łączyć je z wartościami domyślnymi, powtarzać wartości i używać wartości ujemnych.
Sposób z wartownikiem COUNT automatycznie śledzi rozmiar listy, a enum świetnie sprawdza się jako indeks tablicy. Proszę pamiętać: C nie sprawdza zakresu, więc należy samodzielnie weryfikować wartości.
Często zadawane pytania
Czy lekcja „Wartości enumów i zakresy” jest bezpłatna?
Tak — pełny tekst „Wartości enumów i zakresy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wartości enumów i zakresy”?
Będzie Pan/Pani kontrolować bazowe liczby całkowite. Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C Academy?
Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Wartości enumów i zakresy”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?
Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Definiowanie enumów
- Wartości enumów i zakresy
- Zmienne const
- Stałe #define