C语言——枚举enum

哎,那个enum……2 02 2 年,我刚开始学习C语言,看着enum有点迷茫。
后来我才知道,这个东西还是蛮有用的。
例如,在项目中,如果要表达星期几或颜色,使用枚举是很好的。
例如,enum Weekday {星期一、星期二、星期三、星期四、星期五、星期六、星期日};这样,如果您使用 Weekday mon = Monday;将等于 0,Weekday Tue = Tuesday;将等于 1 等等。
代码看起来很清楚。

再比如,如果你在一个软件中,它代表某种状态,可以是OK、ERROR或WARNING。
你可以写 enum Status {OK = 1 , ERROR = 2 , WARNING = 3 };这使用 Status st = OK;等于 1 ,并且状态 st = 错误;等于2 这样调试的时候,看数字就知道是什么状态,比直接使用int要好。

也可以先定义枚举类型,然后再声明变量。
例如,枚举颜色{Red,Green,Blue};然后你可以写 Color myColor = Red;从而声明一个 Color 类型的变量。
或者你可以直接写 enum Color myColor = Green;定义时,使变量类型和枚举类型关联起来。

但是,有时你会看到直接定义的枚举变量,如 enum {Age = 2 5 , Height = 1 7 5 };然后使用年龄;高度;直接地。
后来我才知道其实不建议这样做。
由于您可能忘记了之前定义 enum 并在后面直接使用它,因此编译器可能不知道您引用的是哪个 enum 值。
所以最好先定义枚举类型,然后再声明变量。

简而言之,如果使用正确,枚举确实可以提高代码的可读性。
你正在写一个2 02 2 年的项目,比如在一个城市开发的软件,比如订单处理系统。
使用枚举来表示订单状态比使用一串数字或字符串直观得多。
也许我有点极端,但我认为 enum 确实很有用。

MQL5从入门到精通【第二章】变量与数据类型(三)

枚举是命名常量的集合,比硬编码更直观。
我上周刚刚使用过订购系统,使用枚举来定义状态对我来说特别清楚。

结构体封装了不同类型的数据。
我正在开发的一个项目使用结构来存储用户信息。
这比单独定义变量更方便。

小心类型转换。
上周我遇到了一个情况,在将 double 转换为 int 时丢失了小数点,导致价格计算错误。
您需要在使用 (int) 进行投射之前检查范围。

预定义的结构比自定义结构更简单。
只需直接使用 MqlTick 即可,无需自己定义时间戳和价格字段。

隐式转换很容易出现问题。
就我个人而言,我习惯于显式转换,这样我的代码就不容易混淆。
如何防止转换后的值溢出?

新手入门C语言第十二章:C enum(枚举)

简单地说,C 中的枚举旨在为整数提供一个好听的名称,并使代码看起来更高级。

首先我来说说最重要的事情。
枚举的实体仍然是整数(int或unsigned int),但是编译器会帮助你检查类型是否正确。
比如我们去年跑的一个项目,有一个地方我们直接把枚举变量赋值给整数。
结果,我们陷入了陷阱。
虽然编译器没有报错,但是运行时就出了问题。
还有一点是间歇性枚举(如ENUM_0、ENUM_1 0=1 0)不能直接使用for循环来遍历。
很多人没有注意到这一点。
一开始我以为可以通过,后来发现这是错误的。
还有一个更重要的细节。
用行话来说,这称为雪崩效应。
事实上,前面的一个小延迟就会导致其他一切都下降。
例如,如果没有显式赋值某个具体的枚举值,则默认继承之前的值,导致所有业务逻辑不一致。

说实话,这很令人困惑。
不同枚举类型的变量不能直接比较,即使底层值相同。
例如,如果直接使用==比较变量enum DAY和enum MONTH,就会出现问题。
等等,还有别的事。
枚举是 C++ 中的独立类型,但它们更接近于 C 中整数的别名。
记住这一点很重要。

建议显式初始化枚举值,例如MON=1 不要考虑默认从 0 开始以避免出现问题。
该代码不可读且容易出错。
您认为直接赋值给整数(例如周末=a;)比强制类型转换(enumdayweekend=(enumday)a;)更简洁吗?