Enum-värden och intervall
Styr de underliggande heltalen.
Enum-värden och intervall är en gratis lektion i C Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C Academy innehåller totalt 4 lektioner.
Tilldela uttryckliga värden
Du är inte bunden till standardföljden 0, 1, 2. Du kan tilldela vilket heltal som helst till ett namn med hjälp av =.
Det är användbart när talen måste stämma överens med ett externt system, till exempel HTTP-statuskoder.
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };Skriva ut anpassade värden
När värdena har tilldelats är det exakt dessa tal som lagras och skrivs ut.
Här motsvarar enum-namnen direkt standardiserade HTTP-koder.
#include <stdio.h>
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };
int main(void) {
printf("%d %d\n", OK, NOT_FOUND);
return 0;
}Blanda uttryckliga värden och standardvärden
Om du anger vissa värden och lämnar andra tomma fortsätter varje tomt namn att räknas från det föregående värdet.
Ett namn direkt efter = 10 blir alltså 11, sedan 12 och så vidare.
#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;
}Börja på ett
Ett vanligt knep är att låta det första värdet vara 1 i stället för 0, så att numreringen motsvarar hur människor räknar.
Här är MON 1, vilket gör att dagarna numreras från 1 till 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;
}Dubblettvärden är tillåtna
Två enum-namn kan ha samma heltalsvärde. C kräver inte att de ska vara unika.
Det används ibland för att skapa alias för samma begrepp.
#include <stdio.h>
enum Color { RED = 1, CRIMSON = 1, BLUE = 2 };
int main(void) {
printf("%d %d\n", RED, CRIMSON);
return 0;
}Negativa värden
Enum-värden kan också vara negativa. De är heltal med tecken.
Det kan uttrycka felkoder under noll tillsammans med ett neutralt eller positivt intervall.
#include <stdio.h>
enum Temp { COLD = -1, NORMAL = 0, HOT = 1 };
int main(void) {
printf("%d %d %d\n", COLD, NORMAL, HOT);
return 0;
}Knepet med en COUNT-sentinel
Om du listar objekt med början på 0 och lägger till ett sista namn är det sista namnet lika med antalet objekt.
Det här COUNT-knepet ger storleken automatiskt, även när du lägger till nya objekt.
#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
printf("%d fruits\n", FRUIT_COUNT);
return 0;
}Enum som arrayindex
Eftersom enum-värden är heltal fungerar de utmärkt som arrayindex.
Tillsammans med COUNT-knepet kan du dimensionera en array exakt och indexera den med lättlästa namn.
#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;
}Den underliggande typen
I standard-C lagras enum-värden i en heltalstyp som kompilatorn väljer, vanligtvis int.
Typen är tillräckligt stor för att rymma alla värden du definierar, så även stora eller negativa konstanter får plats.
#include <stdio.h>
enum Big { SMALL = 0, LARGE = 1000000 };
int main(void) {
printf("%d\n", LARGE);
return 0;
}Ingen inbyggd intervallkontroll
C hindrar dig inte från att tilldela ett värde som inte finns i listan till en enum-variabel.
Tilldelningen nedan kompileras och körs. Det är ditt ansvar att se till att värdena är giltiga.
#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
enum Level x = 99;
printf("%d\n", x);
return 0;
}Iterera över ett intervall
När en enum går från 0 till en COUNT-sentinel kan du iterera över alla värden med en enkel for-loop.
Detta går igenom varje definierat objekt fram till, men inte inklusive, räknaren.
#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;
}Snabbkontroll
Resonera kring blandade enum-värden.
Sammanfattning
Du kan tilldela uttryckliga enum-värden, blanda dem med standardvärden, upprepa värden och använda negativa värden.
COUNT-sentinel-knepet håller automatiskt reda på listans storlek, och enum fungerar utmärkt som arrayindex. Kom ihåg: C utför ingen intervallkontroll, så du måste själv validera värdena.
Lär dig C med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 39
- Lektioner
- 144
Vanliga frågor
Är lektionen ”Enum-värden och intervall” gratis?
Ja – hela texten till ”Enum-värden och intervall” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Enum-värden och intervall”?
Styr de underliggande heltalen. Ni övar på C Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C Academy?
Du behöver inga förkunskaper. Utbildningen i C Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Enum-värden och intervall”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C Academy-lektionen?
Ja. Varje C Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Definiera enum-typer
- Enum-värden och intervall
- const-variabler
- #define-konstanter