什么是编程语言中的枚举?(an enum in programming languages?)

枚举的简短,枚举变量类型可以在C(ANSI,而不是原始K&R)、C++和C*中找到。其思想是使用具有受限值集的类型,而不是使用int来表示一组值。...

枚举的简短,枚举变量类型可以在C(ANSI,而不是原始K&R)、C++和C*中找到。其思想是使用具有受限值集的类型,而不是使用int来表示一组值。

Young man sitting at computer

例如,如果我们使用彩虹的颜色

  1. 红色
  2. 橙色
  3. 黄色的
  4. 绿色
  5. 蓝色
  6. 靛蓝
  7. 紫罗兰色

如果枚举不存在,可以使用#define(在C中)或C++/C中的const来指定这些值。如

太多的整数无法计数!

问题是整数比颜色多得多。如果violet的值为7,并且程序为一个变量指定了一个值15,那么它显然是一个bug,但可能不会被检测到,因为15是int的有效值。

救命稻草

枚举是用户定义的类型,由一组名为枚举数的命名常量组成。彩虹的颜色将按如下方式绘制:

现在在内部,编译器将使用一个int来保存这些值,如果没有提供值,红色将是0,橙色将是1等等。

什么是枚举的好处(the benefit of an enum)?

关键是彩虹颜色是一种类型,只有相同类型的其他变量可以分配给它。C是更容易去的(即不严格类型化),但是C++和C ^不允许赋值,除非强制使用强制转换。

您不必拘泥于这些编译器生成的值,您可以将自己的整数常量分配给它们,如下所示。

让蓝色和靛蓝具有相同的值并不是一个错误,因为枚举数可能包含诸如猩红和深红之类的同义词。

语言差异

在C语言中,变量声明前面必须有单词enum,如中所示

但是,在C++中,不需要雨伞颜色,因为它是一种不需要枚举类型前缀的不同类型。

在C#中,通过类型名称访问值,如中所示

什么是枚举点(the point of enums)?

使用枚举可以提高抽象级别,让程序员思考值的含义,而不必担心它们是如何存储和访问的。这减少了错误的发生。

这里有一个例子。我们有一套红、黄、绿三个灯泡的交通灯。在英国,交通灯的顺序在这四个阶段发生变化。

  1. 红色交通停止。
  2. 红色和黄色-交通仍然停止,但灯将变为绿色。
  3. 绿色交通可以移动。
  4. 黄色-警告即将变为红色。

交通灯示例

通过写入控制字节的底部三位来控制灯光。它们在下面以二进制形式以位模式排列,其中RYG表示三位。如果R为1,则红灯亮等。

在这种情况下,很容易看出上述四种状态对应于值4=红色开启、6=红色+黄色开启、1=绿色开启和2=黄色开启。

具有此功能

使用类而不是枚举

在C++和C语言中,我们需要创建一个类,然后重载操作符,允许或处理类型的交通灯。

通过使用枚举,我们可以防止分配给灯泡控制字节的其他位出现问题。可能是其他一些位控制自检或“绿色通道”开关。在这种情况下,允许在正常使用中设置这些位的错误可能会造成严重破坏。

当然,我们会屏蔽SetTrafficlights()函数中的位,这样无论传入什么值,都只会更改底部的三位。

结论

枚举有以下好处:

  • 它们限制枚举变量可以采用的值。
  • 它们迫使您考虑枚举可以采用的所有可能值。
  • 它们是一个常量而不是一个数字,增加了源代码的可读性

  • 发表于 2021-09-15 05:01
  • 阅读 ( 157 )
  • 分类:编程

你可能感兴趣的文章

值类型(value type)和参考类型(reference type)的区别

关键区别–值类型与参考类型 一种编程语言被设计用来给计算机发出执行任务的指令。该程序可以操作包含数字、字符和字符串的数据,并向用户生成信息。用特定编程语言编写的一系列指令就是一个程序。在C#等编程语言...

  • 发布于 2020-10-19 07:42
  • 阅读 ( 508 )

在操作系统之前使用了哪些“概念”?

...DavidPostill将为我们****。首先,红砖: Early computers* ran one program at a time and programs loaded directly from paper tape with holes punched in it (for example). You would program the earliest computers* by setting a large set of on-off switches. Colossus Atlas Manchester *I am us...

  • 发布于 2021-04-11 06:50
  • 阅读 ( 210 )

软件本机运行意味着什么?

...ft Windows, Microsoft needed to write a compatibility layer so that 32-bit programs would still work on the new 64-bit system. This is why some programs are often installed to a folder called Program Files (x86), where x86 means “32-bit”. Compatibility layers tend to be more intimate with the...

  • 发布于 2021-04-11 18:47
  • 阅读 ( 232 )

为什么计算机从零开始计数?

...题 超级用户读者DragonLord很好奇为什么大多数操作系统和编程语言都是从零开始计算的。他写道: Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero. What historical reas*** exis...

  • 发布于 2021-04-11 22:00
  • 阅读 ( 159 )

脚本语言(scripting language)和程序设计语言(programming language)的区别

...开发也相应增长。但是这些脚本语言到底是什么?它们与编程语言有什么不同?随着操作系统的发展,系统任务变得更加复杂,需要多个文件和系统实用程序来完成任务。突然出现了对一类高级语言的需求,这些语言可以执行OS...

  • 发布于 2021-06-26 05:00
  • 阅读 ( 662 )

肢体语言(body language)和副语言(paralanguage)的区别

身体语言的主要区别(main difference body language) vs. 副语言(paralanguage) 非言语交际是无需言语的信息交流。肢体语言和副语言是非言语交际的两个重要范畴。肢体语言是指一个人的手势、面部表情和姿势。副语言是指言语的非词汇...

  • 发布于 2021-06-27 20:15
  • 阅读 ( 727 )

翻译(translator)和程序设计语言中的解释器(interpreter in programming language)的区别

在编程语言中,翻译器和解释器的主要区别在于,翻译器是一种将代码从一种编程语言转换为另一种编程语言的软件,而解释器是一种将高级编程语言转换为机器语言的翻译器。 计算机程序是计算机执行任务的一组指令。它由...

  • 发布于 2021-06-30 18:15
  • 阅读 ( 364 )

常数(constant)和c语言中的变量(variable in c programming)的区别

...一个保存数据的内存位置。 C是由dennisritchie开发的结构化编程语言。它有各种编程结构,如循环、函数和指针。定义常量和变量是编写程序的初始步骤。常量是指一个固定值,定义后不能更改。另一方面,变量是标识特定内存位...

  • 发布于 2021-06-30 21:33
  • 阅读 ( 619 )

脚本语言(scripting language)和程序设计语言(programming language)的区别

脚本语言和编程语言的主要区别在于,用脚本语言编写的源代码使用解释器转换为机器代码,而用编程语言编写的源代码使用编译器或解释器转换为机器代码。 脚本语言是一种在一个文件中包含一系列命令的计算机语言,可以...

  • 发布于 2021-07-01 02:49
  • 阅读 ( 263 )

标记语言(markup language)和程序设计语言(programming language)的区别

标记语言和编程语言之间的主要区别在于,标记语言定义了一组规则,用于以人类可读和机器可读的格式对文档进行编码,而编程语言提供了一组命令和语法,可用于编写用户理解的计算机程序计算机。 标记语言(markup language...

  • 发布于 2021-07-01 02:50
  • 阅读 ( 639 )
yz962049
yz962049

0 篇文章

相关推荐