Validate a raw integer before casting it into an enum used by later branches.

Enum Validation

enum_validation.c
#include <stdio.h>

enum Mode {
    MODE_READ = 1,
    MODE_WRITE = 2,
    MODE_ADMIN = 3
};

int validMode(int raw, enum Mode *mode) {
    if (raw < MODE_READ || raw > MODE_ADMIN) {
        return 0;
    }
    *mode = (enum Mode)raw;
    return 1;
}

int main(void) {
    int rawMode = ;
    enum Mode mode = MODE_READ;
    int ok = validMode(rawMode, &mode);
    int canWrite = ok && mode != MODE_READ;

    printf("rawMode=%d ok=%d mode=%d canWrite=%d\n", rawMode, ok, mode, canWrite);
    return 0;
}
#include <stdio.h>

enum Mode {
    MODE_READ = 1,
    MODE_WRITE = 2,
    MODE_ADMIN = 3
};

int validMode(int raw, enum Mode *mode) {
    if (raw < MODE_READ || raw > MODE_ADMIN) {
        return 0;
    }
    *mode = (enum Mode)raw;
    return 1;
}

int main(void) {
    int rawMode = ;
    enum Mode mode = MODE_READ;
    int ok = validMode(rawMode, &mode);
    int canWrite = ok && mode != MODE_READ;

    printf("rawMode=%d ok=%d mode=%d canWrite=%d\n", rawMode, ok, mode, canWrite);
    return 0;
}
#include <stdio.h>

enum Mode {
    MODE_READ = 1,
    MODE_WRITE = 2,
    MODE_ADMIN = 3
};

int validMode(int raw, enum Mode *mode) {
    if (raw < MODE_READ || raw > MODE_ADMIN) {
        return 0;
    }
    *mode = (enum Mode)raw;
    return 1;
}

int main(void) {
    int rawMode = ;
    enum Mode mode = MODE_READ;
    int ok = validMode(rawMode, &mode);
    int canWrite = ok && mode != MODE_READ;

    printf("rawMode=%d ok=%d mode=%d canWrite=%d\n", rawMode, ok, mode, canWrite);
    return 0;
}
raw input External values often arrive as plain integers, not typed enum constants.
safe cast The cast happens only after a range check proves the enum value is expected.