枚举常量及其应用

简介: 枚举常量及其应用

枚举常量基本要素

枚举常量的声明符

我们使用enum关键词来创建一个新的类型,这个类型里面包含了多个元素。


我们利用enum创建一个新的枚举类型。这里有两个注意的点,第一,每一个枚举元素后面是英文逗号','如果你写成了分号“;”或者中午的逗号“,”都会出现问题。第二,每次建立完枚举类型之后,都需要在大括号{}后面加一个分号“;”


enum color
{
  red,
  green,
  yellow
};


枚举常量的默认值

枚举常量默认值是0,1,2依次递增的。

#include <stdio.h>
enum color
{
  red,
  green,
  yellow
};
int main()
{
  printf("%d\n", red);   //0
  printf("%d\n", green); //1
  printf("%d\n", yellow);//2
  return 0;
}


枚举常量的赋值

但是如果我们想给他们赋值,这样写

enum color
{
  red = 2,
  green = 4,
  yellow = 8
};


但是我们又需要注意,如果只给其中一个枚举常量赋值,但是后面的值没有被赋予。那么后的常量会根据被赋予值开始,依次递增。而被赋值前的值从0开始递增。

#include <stdio.h>
enum color
{
  red,
  black,
  green = 4,
  yellow
};
int main()
{
  printf("%d\n", red);    //0,被赋予值之前的从0开始递增
    printf("%d\n", black);  //1
  printf("%d\n", green);  //4,被赋予值之后,从赋予值开始递增
  printf("%d\n", yellow); //5
  return 0;
}


枚举常量的引用

枚举常量的使用

有了枚举常量之后,我们可以这样使用。这样能够方便的得知我所选择的颜色是什么,并且根据所选的颜色进行相对应的操作。

#include <stdio.h>
enum color
{
  red,
  green,
  yellow
};
int main()
{
  int Select_color = red;
  if (Select_color == red)
  {
    printf("red\n");
  }
  if (Select_color == green)
  {
    printf("green\n");
  }
  if (Select_color == yellow)
  {
    printf("yellow\n");
  }
  return 0;
}


枚举常量的应用

但是这个时候有人又会觉得,感觉上面所说的不足以让他信服。据我所知,枚举常量在嵌入式中出现比较方便。看下面图片,我们有一个IE中断运行寄存器。从最低位B0到最高位B7,有七个bit位。每一位表示进行一个操作,很明显我们难以记下来。那怎么办呢?枚举就是最好的办法


如下为枚举之后的代码。很明显,如果我们想打开寄存器中的某一个位,就不需要再去看数据手册了,直接根据这个枚举就很轻松的可以随意操作。

#include <stdio.h>
enum IE
{
  EX0    = 0x01,//0000 0001
  ET0    = 0x02,//0000 0010
  EX1    = 0x04,//0000 0100
  ET1    = 0x08,//0000 1000
  ES     = 0x10,//0001 0000
  ET2    = 0x20,//0010 0000
  Retain = 0x40,//0100 0000
  EA     = 0x80 //1000 0000
};
int main()
{
  int Select_IE = EX0;
  if (Select_IE == EX0)
  {
    printf("EX0\n");
  }
  if (Select_IE == ET0)
  {
    printf("ET0\n");
  }
  if (Select_IE == EX1)
  {
    printf("EX1\n");
  }
  return 0;
}


枚举常量需要注意的地方

不能对枚举常量赋值

我们不能对枚举常量赋值,只能讲他们的值赋给其他变量。这个时候有人会有疑惑了,怎么不能赋值呢?明明上面不是说了给枚举常量赋值了吗?其实我们这个地方说不能给枚举常量赋值是说,不能再enum外给枚举常量赋值。

但是我们需要注意,枚举常量可以把自己的值赋予别人。


#include <stdio.h>
enum IE
{
  EX0    = 0x01,//0000 0001
  ET0    = 0x02,//0000 0010
  EX1    = 0x04,//0000 0100
  ET1    = 0x08,//0000 1000
  ES     = 0x10,//0001 0000
  ET2    = 0x20,//0010 0000
  Retain = 0x40,//0100 0000
  EA     = 0x80 //1000 0000
};
int main()
{
  EX0 = 30;  //报错,表达式必须是可修改的左值
    int Select_IE = EX0;  //可以,枚举常量的值可以赋予其他变量
  return 0;
}

不能再定义与枚举常量名字相同的变量

#include <stdio.h>
enum IE
{
  EX0    = 0x01,//0000 0001
  ET0    = 0x02,//0000 0010
  EX1    = 0x04,//0000 0100
  ET1    = 0x08,//0000 1000
  ES     = 0x10,//0001 0000
  ET2    = 0x20,//0010 0000
  Retain = 0x40,//0100 0000
  EA     = 0x80 //1000 0000
};
int main()
{
  int EX0;   //报错
  return 0;
}


不能用&取得他们的地址

#include <stdio.h>
enum IE
{
  EX0    = 0x01,//0000 0001
  ET0    = 0x02,//0000 0010
  EX1    = 0x04,//0000 0100
  ET1    = 0x08,//0000 1000
  ES     = 0x10,//0001 0000
  ET2    = 0x20,//0010 0000
  Retain = 0x40,//0100 0000
  EA     = 0x80 //1000 0000
};
int main()
{
  int* x = &EX0;  //报错
  return 0;
}
目录
相关文章
|
6月前
|
存储 开发者
如何确定常量的类型
在编程中,常量是程序中值不会改变的量。确定常量的类型是非常重要的,因为它直接影响了程序的效率和可读性。选择正确的常量类型可以确保程序占用更少的内存,运行更快,并且更容易理解和维护。
66 2
|
存储
3.2.6 怎样确定常量的类型
3.2.6 怎样确定常量的类型
47 0
|
2月前
|
Python
常量
常量。
22 4
|
6月前
|
编译器 C++
C++程序中的常量
C++程序中的常量
55 0
|
6月前
|
C语言
c常量
c常量
39 1
|
6月前
|
程序员 编译器 C++
c++常量
c++常量
60 0
|
6月前
|
安全 编译器 C++
5常量
5常量
34 1
|
存储
C 常量
C 常量。
32 1
|
Java 编译器 C++
常量接口 vs 常量类 vs 枚举区别
把常量定义在接口里与类里都能通过编译,那2者到底有什么区别呢?
69 0
|
存储 编译器 Linux
关于枚举常量手误带来的错误
关于枚举常量手误带来的错误
107 0