c语言枚举类型

为什么使用枚举类型?

在一些程序中,有一些变量只有少数的几个有意义的值,例如:一个布尔变量只有两个值,真和假,又如:在游戏中用户的操作方向只有4个上下左右。
可以使用宏定义的方式来实现:

#define BOOL int
#define TRUE 1
#define FALSE 0

BOOL max(int a,int b){
    return a>b?TRUE:FALSE;
}

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
    BOOL result = max(1,2);
    printf("%d\n",result);

	return 0;
}


    
+++++++++++++++++++++++++++++++++
//上面通过宏定义来实现由几个弊端
    //如果没有于都程序的人,并不知道true false 具有相同的类型
    //如果变量值比较多,宏定义很麻烦
    //宏定义在编译器编译期间被删除,给调试带来了不便
    //c语言提供了一种特殊类型枚举来解决这个问题,
    
++++++++++++++++++++++++++++++++
枚举的定义和之前的union struct 一样都是可以有变量,标记,和类型定义这三种。
+++++++++++++++++++++++++++++++

//结构类型的定义
    struct{
        int pid;
        char name[10];
        int age;
    }p1;
    
    union{
        int pid;
        char name[10];
        int age;
    }u1;
    
    //枚举类型,e是枚举类型的变量,这个变量的取值可以是TRUE,FALSE    false;
    
    enum{
        //TRUE,FALSE
        //TRUE=1,FALSE=0
        FALSE,TRUE//枚举的默认情况下,第一个元素值为0
    }e;
    
    //e可以赋值为非TRUE,FALSE的,例如e=8;是可以的,但是一般还是取自己的值
    e=TRUE;
    printf("%d\n",e);
    
    //和结构以及联合一样,也可以是枚举标示
    enum ENUMBOOL{
        TRUE,FALSE
    };
    
    enum ENUMBOOL en = TRUE;
     
    
    //和结构以及联合一眼,也可以是类型定义
    typedef enum{
        TRUE,FALSE
    }TYPEENUMBOOL;


    TYPEENUMBOOL tnbool = FALSE;
    
    //枚举成员只能是整形的
    typedef enum{
        UP,//枚举的默认情况下,第一个元素值为0
        DOWN,//如果DOWN =5, 那么下面的LEFT =6,就是后面的成员值在前面的值基础上加1
        LEFT,
        RIGHT
    }DIRECTION;
    
    DIRECTION d1;
    d1=UP;
    printf("%d\n",d1);



++++++++++++++++++++++++++++

//
//  main.c
//  EnumTest
//
//  Created by 千 on 16/7/22.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#include <stdio.h>

#define BOOL int
#define TRUE 1
#define FALSE 0

BOOL max(int a,int b){
    return a>b?TRUE:FALSE;
}


int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    
     
    BOOL result = max(1,2);
    printf("%d\n",result);
    
    //上面通过宏定义来实现由几个弊端
    //如果没有于都程序的人,并不知道true false 具有相同的类型
    //如果变量值比较多,宏定义很麻烦
    //宏定义在编译器编译期间被删除,给调试带来了不便
    //c语言提供了一种特殊类型枚举来解决这个问题,
    
    
    //结构类型的定义
    struct{
        int pid;
        char name[10];
        int age;
    }p1;
    
    union{
        int pid;
        char name[10];
        int age;
    }u1;
    
    //枚举类型,e是枚举类型的变量,这个变量的取值可以是TRUE,FALSE    false;
    
    enum{
        //TRUE,FALSE
        //TRUE=1,FALSE=0
        FALSE,TRUE//枚举的默认情况下,第一个元素值为0
    }e;
    
    //e可以赋值为非TRUE,FALSE的,例如e=8;是可以的,但是一般还是取自己的值
    e=TRUE;
    printf("%d\n",e);
    
    //和结构以及联合一样,也可以是枚举标示
    enum ENUMBOOL{
        TRUE,FALSE
    };
    
    enum ENUMBOOL en = TRUE;
     
    
    //和结构以及联合一眼,也可以是类型定义
    typedef enum{
        TRUE,FALSE
    }TYPEENUMBOOL;

    TYPEENUMBOOL tnbool = FALSE;
    
    //枚举成员只能是整形的
    typedef enum{
        UP,//枚举的默认情况下,第一个元素值为0
        DOWN,//如果DOWN =5, 那么下面的LEFT =6,就是后面的成员值在前面的值基础上加1
        LEFT,
        RIGHT
    }DIRECTION;
    
    DIRECTION d1;
    d1=UP;
    printf("%d\n",d1);
    
    return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值