C Academy · Lektion

Definér enums

Opret læselige navngivne værdier.

Lektion 1 af 413 trin

Definér enums er en gratis C Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C Academy-kurset indeholder 4 lektioner i alt.

Hvad er en enum?

En enumerering (enum) er en brugerdefineret type, der samler et sæt navngivne heltalskonstanter.

I stedet for at huske, at 0 betyder mandag, og 1 betyder tirsdag, giver du tallene læsbare navne. Det gør koden tydeligere og sværere at skrive forkert.

Grundlæggende syntaks

Du erklærer en enum med nøgleordet enum, et tagnavn og en liste med navne i klammer.

Hvert navn bliver en konstant, som du kan bruge overalt, hvor der forventes et heltal.

enum Weekday { MON, TUE, WED, THU, FRI };

Standardværdier starter ved 0

Som standard er det første navn 0, og hvert efterfølgende navn er én større end det forrige.

I enum Weekday er MON derfor 0, TUE er 1, WED er 2 osv.

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    printf("%d %d %d\n", MON, TUE, WED);
    return 0;
}

Erklæring af en enum-variabel

Når en enum-type findes, kan du oprette variabler af denne type.

Variablen indeholder én af de navngivne værdier. Under motorhjelmen er den blot en int.

#include <stdio.h>
enum Weekday { MON, TUE, WED, THU, FRI };
int main(void) {
    enum Weekday today = WED;
    printf("today = %d\n", today);
    return 0;
}

Hvorfor enum gør koden mere læsbar

Sammenlign if (state == 2) med if (state == PAUSED).

Den anden version er selvforklarende. Enum lader compileren holde styr på betydningen, mens du læser rene, navngivne værdier i stedet for mystiske tal.

enum Status { RUNNING, PAUSED, STOPPED };

Brug af enum med switch

Enum passer naturligt sammen med switch-sætninger. Hver navngiven værdi bliver en tydelig case-etiket.

Dette er en af de mest almindelige anvendelser af enum i praksis.

#include <stdio.h>
enum Status { RUNNING, PAUSED, STOPPED };
int main(void) {
    enum Status s = PAUSED;
    switch (s) {
        case RUNNING: printf("running\n"); break;
        case PAUSED:  printf("paused\n");  break;
        case STOPPED: printf("stopped\n"); break;
    }
    return 0;
}

Enum-værdier er blot heltal

Enum-konstanter kan bruges på samme måde som heltal. Du kan udføre aritmetik og sammenligninger med dem.

Denne fleksibilitet er praktisk, men det betyder også, at C ikke forhindrer dig i at gemme et tal uden for det gyldige interval.

#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
    enum Level next = LOW + 1;
    printf("%d\n", next);
    return 0;
}

Anonyme enum’er

Du kan udelade tagnavnet, hvis du kun har brug for konstanterne og ikke en navngiven type.

Det er en hurtig måde at definere en gruppe relaterede heltalskonstanter på.

#include <stdio.h>
enum { RED, GREEN, BLUE };
int main(void) {
    printf("%d %d %d\n", RED, GREEN, BLUE);
    return 0;
}

Navngivningskonventioner

Efter konvention skrives navne på enum-konstanter med STORE_BOGSTAVER ligesom makroer.

Det signalerer til læseren, at værdien er en fast konstant. Tagnavnet bruger ofte CamelCase eller PascalCase.

enum TrafficLight { LIGHT_RED, LIGHT_YELLOW, LIGHT_GREEN };

Kombination med typedef

Det er omstændeligt at skrive enum Weekday overalt. Med en typedef kan du bruge et kort navn.

Efter typedef kan du erklære variabler som Weekday today; uden nøgleordet enum.

#include <stdio.h>
typedef enum { MON, TUE, WED } Weekday;
int main(void) {
    Weekday d = TUE;
    printf("%d\n", d);
    return 0;
}

Enum-konstanters scope

Navne på enum-konstanter deler namespace med almindelige identifikatorer i deres scope.

Det betyder, at to enum’er i samme scope ikke kan genbruge det samme konstantnavn. Vælg forskellige navne for at undgå sammenstød.

enum A { OPEN, CLOSED };
enum B { LOCKED, UNLOCKED };

Hurtig kontrol

Test din forståelse af standardværdier for enum.

Opsummering

En enum definerer navngivne heltalskonstanter. Den første er 0, og hvert efterfølgende navn er én større, medmindre du angiver noget andet.

Enum gør koden læsbar, passer godt sammen med switch og kan forkortes med typedef. Nu skal du undersøge brugerdefinerede værdier og intervaller.

Gratis at komme i gang

Lær C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Definér enums” gratis?

Ja — hele teksten til “Definér enums” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Definér enums”?

Opret læselige navngivne værdier. Du øver dig i C Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C Academy?

Der kræves ingen tidligere erfaring. C Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Definér enums”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C Academy-lektion?

Ja. Alle C Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Definér enums
  2. Enum-værdier og ranges
  3. const-variabler
  4. #define-konstanter
← Tilbage til C Academy