当前位置:  开发笔记 > 编程语言 > 正文

c枚举的重要性(typedef enum)

如何解决《c枚举的重要性(typedefenum)》经验,为你挑选了2个好方法。

我最近在为我发布的答案中看到了这个:

    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是什么类型的变量?



1> paulsm4..:

    这绝对不是"太技术化".

    " 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 ; 



2> Ryan Fitzpat..:

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

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有