一个枚举类型是独特的类型,它的值是其值基本类型(见下面),其中包括明确命名常数(的值枚举常数)。

句法

枚举类型使用以下枚举说明符作为声明语法中的类型说明符进行声明:

enum identifier(optional) { enumerator-list }

其中,枚举器列表是逗号分隔的列表(允许使用尾随逗号)(自C99以来)的枚举器,其中每个列表的形式为:

enumerator(1)enumerator = constant-expression(2)

其中

identifier, enumerator-identifiers that are introduced by this declarationconstant-expression-integer constant expression whose value is representable as a value of type int

与结构体或联合体一样,引入枚举类型和一个或多个枚举常量的声明也可以声明该类型或类型的一个或多个对象。

enum color_t {RED, GREEN, BLUE}, c = RED, *cp = &c; // introduces the type enum color_t // the integer constants RED, GREEN, BLUE  // the object c of type enum color_t // the object cp of type pointer to enum color_t

说明

每个出现在枚举说明符主体中的枚举器都会成为一个int在封闭范围内具有类型的整数常量,并且可以在需要整数常量时使用(例如,作为 case 标签或非 VLA 数组大小)。

enum color_t { RED, GREEN, BLUE} r = RED;switch(r) {     case RED   : puts("red"); break;     case GREEN : puts("green"); break;     case BLUE  : puts("blue"); break;}

如果枚举器后跟=常量表达式,则其值是该常量表达式的值。如果枚举器后面没有= constant-expression,那么它的值是比同一个枚举中前一个枚举器的值大1的值。第一个枚举器的值(如果它不使用= constant-expression)为零。

enum Foo { A, B, C=10, D, E=1, F, G=F+C};//A=0, B=1, C=10, D=11, E=1, F=2, G=12

标识符本身(如果使用)成为标记名称空间中枚举类型的名称,并且需要使用关键字 enum(除非将 typedef 放入普通名称空间中)。

enum color_t { RED, GREEN, BLUE};enum color_t r = RED; // OK// color_t x = GREEN: // Error: color_t is not in ordinary name spacetypedef enum color_t color;color x = GREEN; // OK

每个枚举类型与下列之一兼容:char有符号整数类型或无符号整数类型。它是实现定义的,哪种类型与任何给定枚举类型兼容,但无论它是什么,它必须能够表示该枚举的所有枚举值。

枚举类型是整数类型,因此可以在其他整数类型可以使用的任何位置使用,包括隐式转换和算术运算符。

enum { ONE = 1, TWO } e;long n = ONE; // promotiondouble d = ONE; // conversione = 1.2; // conversion, e is now ONEe = e + 1; // e is now TWO

注意

与 struct 或 union 不同,C 中没有前向声明的枚举:

enum Color; // Error: no forward-declarations for enums in Cenum Color { RED, GREEN, BLUE};

枚举允许以比其更方便和结构化的方式声明命名常量#define; 它们在调试器中可见,遵守范围规则并参与类型系统。

#define TEN 10struct S { int x : TEN; }; // OK

或者

enum { TEN = 10 };struct S { int x : TEN; }; // also OK

参考

C11 standard (ISO/IEC 9899:2011):6.2.5/16 Types (p: 41)

6.7.2.2 Enumeration specifiers (p: 117-118)

C99 standard (ISO/IEC 9899:1999):6.2.5/16 Types (p: 35)

6.7.2.2 Enumeration specifiers (p: 105-106)

C89/C90 standard (ISO/IEC 9899:1990):3.1.2.5 Types

3.5.2.2 Enumeration specifiers

关键词

enum.

c语言枚举类型 char,Enumerations(枚举类型)相关推荐

  1. c枚举类型enum例题_C语言--enum,typedef enum 枚举类型详解

    原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...

  2. C语言程序设计(Part Ⅸ)——链表/共用体类型/枚举类型

    C语言程序设计(Part Ⅸ)的整理笔记,若有错误,欢迎指正. 用指针处理链表 如果有一批数据要存储和引用,有两种方法: 一种方法是采取分配固定存储单元的方法,例如数组.但是在程序执行期间,数组的大小 ...

  3. C#语言基础——结构体和枚举类型

    结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要 ...

  4. 【C语言】自定义类型 结构体 枚举 联合

    结构体的基础知识 结构体是一些值的集合,这些值称为成员变量.结构体的每个成员可以是不同类型的变量. 结构体的声明 定义一个学生的结构体 struct Stu {char name[20];//名字in ...

  5. unity的C#学习——foreach循环相关:IEnumerable接口、LINQ语言集成查询、可枚举对象与枚举类型

    文章目录 C#里的判断和循环 1.foreach循环 2.IEnumerable接口 3.LINQ语言集成查询 4.可枚举对象和枚举类型的区别 C#里的判断和循环 C#和C语言都有条件语句和循环语句, ...

  6. C语言 自定义类型 之 【枚举】

    文章目录 前言 枚举的介绍 枚举类型的定义 枚举的优点 枚举的使用 写在最后 前言 枚举在我们平时练习或学习的时候可能不是很常用,但是其在工程项目里,还是比较常见的,因为他能起到优化用.并且,有时我们 ...

  7. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  8. c枚举类型enum例题_c枚举类型enum用法 枚举类型enum用法 怎么去取所有

    JUDGE(S W ) 指 W 属于 S 枚举类型还是自定义函数里的2个变量不要太久太久不联系我,我怕我一不小心把你忘了. (1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素 ...

  9. 变量/值类型/引用类型/常量/枚举

    变量 声明语法 datatype identifier; 如:int i; //声明一个int类型的变量,但是在没有初始化之前编译器不允许使用该变量 同时声明多个 int a,b;//同时声明两个in ...

最新文章

  1. NSJSONSerliazition文档翻译和使用
  2. MySQL模拟:线上误update的恢复
  3. 第2周项目2程序的多文件组织
  4. [YTU]_2866(结构体---点坐标结构体)
  5. linux下开启程序崩溃生成core文件开关之ulimit详解
  6. 自己动手写CPU(1)五级流水线及CPU第一条指令ori
  7. 【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)
  8. 9个小技巧助你获得职场幸福
  9. session和cookie_JSP学习
  10. ios字典存bool_iOS 常见的数据存储方式
  11. 在matlab中对hsv进行均匀量化和非均匀量化
  12. android中handler简单用法
  13. 凸优化第四章凸优化问题 4.6 广义不等式约束
  14. 个性化推荐系统_推荐系统,个性化预测和优点
  15. java计算机毕业设计ssm宠物店管理系统element vue前后端分离
  16. 删除的PSD文件在哪可以恢复?一定要看看
  17. 【VOLTE】【SRVCC】 SRVCC TO 3GPP
  18. 仿拼多多砍价功能玩法解说
  19. Mindmanager2020教程篇画一个树状思维导图及试用密钥过期
  20. python包装好后在pycharm IED中无法导入

热门文章

  1. 台服海岛纪元显示无法连接服务器,海岛纪元一直登入不进去怎么办
  2. 古代官员怎么复出-多行贿站好队抱住皇上粗大腿
  3. 《越光宝盒》中的经典台词
  4. 2023年度国家自然科学基金项目开放申报及注意事项
  5. 生产环境中办公网络问题排查及解决方案
  6. 在制定调薪计划和沟通调薪结果时,我们到底该做什么
  7. 【1】Docker---Windows系统上安装Boot2Docker以及安装的一些问题
  8. 设置win10输入法的自学习功能 破个性化无法设置
  9. 你打开的那些网页,都被谁监控了?
  10. CMOS数字集成电路知识摘要