枚举和一组预处理的#define有什么不同

时间:2020-11-22 18:32:24 笔试题目 我要投稿

枚举和一组预处理的#define有什么不同

  只有很小的区别。C 标准中允许枚举和其它整形类别自由混用而不会出错。(但是, 假如编译器不允许在未经明确类型转换的情况下混用这些类型,则聪明地使用枚举可以捕捉到某些程序错误。)

  枚举的一些优点: 自动赋值; 调试器在检验枚举变量时, 可以显示符号值; 它们服从数据块作用域规则。

  (编译器也可以对在枚举变量被任意地和其它类型混用时, 产生非重要的警告信息, 因为这被认为是坏风格。)

  一个缺点是程序员不能控制这些对非重要的警告; 有些程序员则反感于无法控制枚举变量的大小。

拓展:

  (1)枚举的`声明:枚举声明用于声明新的枚举类型。

  访问修辞符 enum 枚举名:基础类型

  {

  枚举成员

  }

  基 础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。

  (2)枚举成员

  枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。

  示例:

  public enum TimeofDay:uint

  {

  Morning=-3,

  Afternoon=-2,

  Evening=-1

  }

  产生编译时错误,原因是常数值 -1、-2 和 –3 不在基础整型 uint 的范围内。

  (3)枚举成员默认值

  在枚举类型中声明的第一个枚举成员它的默值为零。

  以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。

  示例:

  public enum TimeofDay:uint

  {

  Morning,

  Afternoon,

  Evening

  }

  Morning的值为0,Afternoon的值为1,Evening的值为2。

【枚举和一组预处理的#define有什么不同】相关文章:

枚举与#define宏的区别12-17

西式快餐和中餐有什么不同09-30

围棋和其它棋类有什么不同09-04

昆曲昆剧和昆腔有什么不同09-09

专插本和本科有什么不同04-04

开除党籍和除名有什么不同03-15

民族唱法和通俗唱法有什么不同09-07

恋爱和结婚到底有什么不同08-26

CAD中外部参照和图块有什么不同11-12