Enum je speciální datový typ, který lze využít pro lepší přehlednost zdrojového kódu. Definujeme ho jako

enum muj_prvni_enum { JEDNA, DVA, TRI };

V programu ho lze použít následovně

#include <stdio.h>

enum rgb_barvy { RED, GREEN, BLUE };

int main() {
    enum rgb_barvy x = GREEN;

    if (x == GREEN) {
        printf("Barva je zelena\n");
    }

    return 0;
}

Pokud bychom si vytiskli hodnoty

#include <stdio.h>

enum rgb_barvy { RED, GREEN, BLUE };

int main() {
    printf("RED je %i\n", RED);
    printf("GREEN je %i\n", GREEN);
    printf("BLUE je %i\n", BLUE);

    return 0;
}

Tak dostáváme

RED je 0
GREEN je 1
BLUE je 2

Lze to ale i přemapovat na jiné hodnoty

enum rgb_barvy { RED = 10, GREEN = 25, BLUE = 156 };

Případně lze definovat hodnotu jenom u některých hodnot enumu

enum rgb_barvy { RED, GREEN = 25, BLUE };

Pak při vytisknutí dostáváme

RED je 0
GREEN je 25
BLUE je 26

Dle pravidla, že první prvek má hodnotu 0 (pokud není definovaná nějaká hodnota viz příklad s RED = 20). Všechny další prvky mají hodnotu buď definovanou nebo se použije hodnota o jedničku větší, než měla předchozí hodnota.

Pro GREEN jsme definovali hodnotu 25. Proto má BLUE hodnotu 26 (o jedna více, než je předchozí hodnota).

Enum můžeme použít i například ve struktuře Switch.

#include <stdio.h>

enum rgb_barvy { RED, GREEN, BLUE };

int main() {
    enum rgb_barvy x = GREEN;

    switch (x) {
        case RED:
            printf("RED je %i\n", RED);
            break;
        case GREEN:
            printf("GREEN je %i\n", GREEN);
            break;
        case BLUE:
            printf("BLUE je %i\n", BLUE);
            break;
    }

    return 0;
}

Enum můžete použít v případech, kdy máte výčet několika hodnot, které spolu souvisí. Například

enum svetove_strany { SEVER, JIH, VYCHOD, ZAPAD };

nebo pokud děláte kalkulačku, tak můžete použít například

enum operace { SCITANI, ODECITANI, NASOBENI, DELENI };

Odkazy

Následující kapitola: Kompilace

GitHub diskuze k této kapitole

Zpátky na přehled

Předchozí kapitola: Datový typ Union