enum用法介绍

最近发现了自己编程知识上的很多不足,于是把之前参与过的项目的代码都翻出来,准备仔细阅读。

这里面有好多之前没有用过或者没怎么在意的细节,就写篇文章记录一下。

enum

enum是一种枚举类型,允许一次定义多个枚举成员并为它们统一赋值。

举个简单的枚举类型的例子:

#include 
enum week {
    Mon,
    Tue,
    Wed
};

int main(){
    printf("Mon = %d \n", Mon);
    printf("Tue = %d \n", Tue);
    printf("Wed = %d \n", Wed);
}

输出为:

Mon = 0 
Tue = 1 
Wed = 2

在这里我们定义了一个名为week的枚举类型,里面有三个枚举成员,但是没有赋值,对应的枚举成员却依然有值。

这是因为枚举类型会自动赋值,默认从0开始,第一个设置的枚举成员为0,第二个为1,后面的枚举成员依次+1。

枚举成员的值也可以手动设置,举个例子:

#include 
enum week {
    Mon,
    Tue = 2 ,
    Wed};

int main(){
    printf("Mon = %d \n", Mon);
    printf("Tue = %d \n", Tue);
    printf("Wed = %d \n", Wed);
}

输出为

Mon = 0 
Tue = 2 
Wed = 3 

默认依然是从0开始,但是由于第二个枚举成员被手动设置成了2,第三个枚举成员变成了2+1=3。


前面我们仅定义了枚举类型,接下来让我们看看如何定义枚举变量

#include 
enum week {
    Mon,
    Tue = 2 ,
    Wed
}day;

 
int main(){
    day = Mon;
    printf("day is %d \n", day);
}

输出为

day is 0

day就是我们定义的一个枚举变量,枚举变量可以等于任何的枚举成员。
在枚举成员取值连续的情况下,枚举变量可以遍历枚举成员,不连续的话则不可以。

在菜鸟教程看到这样一个例子:

#include 
#include 
 
int main()
{
 
    enum day
    {
        saturday,
        sunday,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    } workday;
 
    int a = 100;
    enum day weekend;
   // weekend = ( enum day ) a;  //类型转换
    weekend = a; //错误
    printf("weekend:%d",weekend);
    return 0;
}

输出

weekend:100

按照菜鸟教程上错误的例子也执行成功了…,这个或许和编译器有关
总之虽然其他人教程上写着必须强制类型转换之后,int才能赋值给enum,但是不赋值貌似也行,而且赋的值不在枚举成员的范围内貌似也没什么问题…

与enum功能类似的是define,一旦被定义之后就变成常量,无法被重新赋值。

命令 特点
enum 编译阶段将名字替换成对应的值
define 在预处理阶段将名字替换成对应的值

总结一下

enum可以一次设置多个枚举成员(常量)不需要赋值,默认第一个枚举成员为0,然后依次加一。可以对一个或多个成员单独赋值,未赋值的成员是前一个成员的值+1。enum可以设置变量,变量的值可以等于任意的枚举成员(貌似直接赋值一个非枚举成员的int型也可以)。

你可能感兴趣的:(c语言,c++)