0Pricing
C Academy · Lekcja

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

  1. Definiowanie enumów
  2. Wartości enumów i zakresy
  3. Zmienne const
  4. Stałe #define
← Powrót do C Academy