在C中使用枚举名称的枚举成员

Oys*_*ein 1 c enums

我定义了以下枚举:

typedef enum {
    F105 = 0x00,
    F164 = 0x10,
    F193 = 0x20,
    F226 = 0x30,
    F227 = 0x40
}BOARD_TYPE;
Run Code Online (Sandbox Code Playgroud)

为了使代码可读,我想在使用其中一个成员时使用枚举名称.像这样:

void do_work(uint8_t board_type) {
    if (board_type == BOARD_TYPE.F164) {
        // Do stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这不编译.我收到一条错误消息"'BOARD_TYPE'之前的预期表达式".

那么使用枚举成员同时引用枚举名称以提高代码可读性的正确方法是什么?

Lun*_*din 6

enum是一个值列表,一个"枚举".它不是带成员的struct/container类.

现在,为清楚起见,您应该只将给定类型的枚举常量与相同类型的变量进行比较.不像uint8_t你的例子那样反对.

这是几乎自我记录的代码:

void do_work (BOARD_TYPE board_type) {
    if (board_type == F164) {
        // Do stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

可以将好的编译器配置为在将枚举与错误类型进行比较时发出警告.否则,您还可以使用一些技巧创建类型安全枚举.

您还可以为所有枚举常量添加前缀以指示它们属于哪种类型 - 这是常见做法:

typedef enum {
    BOARD_F105 = 0x00,
    BOARD_F164 = 0x10,
    BOARD_F193 = 0x20,
    BOARD_F226 = 0x30,
    BOARD_F227 = 0x40
}BOARD_TYPE;
Run Code Online (Sandbox Code Playgroud)