> For the complete documentation index, see [llms.txt](https://acezxn.gitbook.io/vex-ji-qi-ren-cheng-shi-jiao-xue/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://acezxn.gitbook.io/vex-ji-qi-ren-cheng-shi-jiao-xue/jin-jie-jiao-xue/jin-jie-c++/enum.md).

# Enum

Enum 是一種用文字代替數字 state 的方式。

```cpp
enum OdomMode {
    MOTOR_IMU = 0,            
    MOTOR_FRONTTW_IMU = 1,    
    LEFTTW_FRONTTW_IMU = 2,   
    RIGHTTW_FRONTTW_IMU = 3, 
    MOTOR_BACKTW_IMU = 4,     
    LEFTTW_BACKTW_IMU = 5,   
    RIGHTTW_BACKTW_IMU = 6,  
    MIDDLETW_IMU = 7,         
};
```

也可以省略等號

```cpp
// equivalent to the code above
enum OdomMode {
    MOTOR_IMU,            
    MOTOR_FRONTTW_IMU,    
    LEFTTW_FRONTTW_IMU,   
    RIGHTTW_FRONTTW_IMU, 
    MOTOR_BACKTW_IMU,     
    LEFTTW_BACKTW_IMU,   
    RIGHTTW_BACKTW_IMU,  
    MIDDLETW_IMU,         
};
```

```cpp
OdomMode get_mode() {
    return MOTOR_IMU;
}

int main() {
    if (get_mode() == OdomMode::MOTOR_IMU) {
        printf("Motor imu mode\n");
    }
    return 0;
}
```

## 安全問題

以下會顯示：「Motor imu mode equals to apple」

```cpp
#include <iostream>
 
// equivalent to the code above
enum OdomMode {
    MOTOR_IMU,            
    MOTOR_FRONTTW_IMU,    
    LEFTTW_FRONTTW_IMU,   
    RIGHTTW_FRONTTW_IMU, 
    MOTOR_BACKTW_IMU,     
    LEFTTW_BACKTW_IMU,   
    RIGHTTW_BACKTW_IMU,  
    MIDDLETW_IMU,         
};

enum Fruit {
    APPLE,
    BANANA,
};

int main() {
    OdomMode mode = MOTOR_IMU;
    Fruit fruit = APPLE;
    if (mode == fruit) {
        printf("Motor imu mode equals to apple\n");
    }
    return 0;
}
```

## 解決方式：Enum class

使用 Enum class 可以有效解決 Enum 混用的問題

```cpp
#include <iostream>
 
// equivalent to the code above
enum class OdomMode {
    MOTOR_IMU,            
    MOTOR_FRONTTW_IMU,    
    LEFTTW_FRONTTW_IMU,   
    RIGHTTW_FRONTTW_IMU, 
    MOTOR_BACKTW_IMU,     
    LEFTTW_BACKTW_IMU,   
    RIGHTTW_BACKTW_IMU,  
    MIDDLETW_IMU,         
};

enum class Fruit {
    APPLE,
    BANANA,
};


int main() {
    OdomMode mode = OdomMode::MOTOR_IMU;
    Fruit fruit = Fruit::APPLE;
    if (mode == fruit) { // throws error
        printf("Motor imu mode equals to apple\n");
    }
    return 0;
}

```
