我最近在为我发布的答案中看到了这个:
typedef enum { NO_OP, ADDITION, } operator_t; int main() { operator_t operator = NO_OP; }
什么是typedef枚举,为什么要使用它?我用Google搜索并发现以下内容:http: //www.programiz.com/c-programming/c-enumeration
现在它对我来说听起来有点太技术性,所以我不认为我理解发生了什么或为什么会使用它.
奖金(可选):operator_t是什么类型的变量?
这绝对不是"太技术化".
" typedef "和" enum "是两个完全不同的东西.
拥有"枚举"的基本原因是避免"魔术数字":
假设你有三个"状态":STOP,CAUTION和GO.你如何在你的计划中代表他们?
一种方法是使用字符串文字"STOP","CAUTION"和"GO".但这有很多问题 - 包括你不能在C"开关/案例"块中使用它们的事实.
另一种方法是将它们映射到整数值"0","1"和"2".这有很多好处.但是在代码中看到"STOP"比看到"0"更有意义.在你的代码中使用"0"是一个" 幻数 " 的例子.幻数是坏的:你想要使用"有意义的名字".
在使用该语言介绍枚举之前,C程序员使用了宏:
#define STOP 0 #define CAUTION 1 #define GO 2
现代C/C++中更好,更清晰的方法是使用枚举:
enum traffic_light_states { STOP, CAUTION, GO };
使用"typedef"只是简化了声明这种类型的变量:
typedef enum { STOP, CAUTION, GO } traffic_light_states_t ;
typedef
用于为现有类型定义替代名称。该enum
会宣布这样的:
enum operator_t { NO_OP, ADDITION, };
然后可以像下面这样声明这种类型的变量:
enum operator_t x = NO_OP;
这有点冗长,因此您可以typedef
用来为此类型定义一个较短的别名:
typedef enum operator_t operator_t;
这定义operator_t
为表示enum operator_t
允许您像这样初始化变量的类型:
operator_t x = NO_OP;
这个语法:
typedef enum { NO_OP, ADDITION, } operator_t;
一步完成整个过程,因此它定义了(未标记或无标记)enum
类型并为其指定了别名operator_t
。
奖励:operator_t
是一种enum
数据类型;在此处阅读有关此内容的更多信息:https : //en.wikipedia.org/wiki/Enumerated_type