liangds 2016-11-09
1:什么是枚举
枚举在C语言中其实就是一些符号常量集,简单来说,枚举就是定义了一些符号(字符串),这些字符的本质就是int类型的常量,每个符号和一个常量相绑定,那么这个符号就成为了一个自定义的识别码,对编译器来说对枚举的认知就是符号常量所绑定的那个int类型的数。直白来讲,枚举就是自己定义一些符号,然后这些符号对应int类型的数,对于程序员来讲,这些符号可以帮助程序员理解代码,而对于编译器来讲,编译器是不认识我么定义的枚举符号的,编译器只认识这个枚举变量所对于的int类型的数
2:枚举的作用
enum ER
{
error;
right;
}
int E_or_R(int a , int b)
{
if(a>b)
{
return right;
}
else
{
return error;
}
}
int main(void)
{
printf("plese input a & b \n");
scanf("%d%d",&a,&b);
int c = E_or_R(a , b);
if(c==right)
{
printf("a>b \n");
}
else(c==error)
{
printf("a<=b \n");
}
return 0;
}
如上面的代码所示,我们通过枚举元素right和error来判断函数E_or_R()返回值,这样就可以很直观地看清楚代码,(因为一般人觉得函数执行成功返回1,函数执行失败返回1,但是不免有人写代码时会把函数执行成功返回0,函数执行失败返回1)。
3:枚举和宏定义的区别
我们知道,宏定义也是用来标示一些参数,让程序员能更直观地看懂代码的方法,但是枚举和宏定义又有区别,比如宏定义是分散定义的,而采用枚举则可以集中定义在一个枚举变量里面,比如我现在要用 SUN MON 等来定义一周的星期
采用红定义的方法是
#define SUN 0
#define MON 1
......
#define SAT 6
而采用枚举的方法
12345678910 enum week
{
SUN, // SUN = 0
MON, // MON = 1;
TUE,
WEN,
THU,
FRI,
SAT,
};
总上所述:
当我们要定义的常量是一个有限集合时(譬如一星期有7天,譬如一个月有31天,譬如一年有12个月····),最适合用枚举。(其实宏定义也行,但是枚举更好)
C语言枚举测试
#include <stdio.h>
/* 定义方法1:只定义枚举类型,不定义变量
enum week
{
SUN, // SUN = 0
MON, // MON = 1;
TUE,
WEN,
THU,
FRI,
SAT,
};
*/
/*定义方法2:同时定义枚举类型和变量
enum week
{
SUN, // SUN = 0
MON, // MON = 1;
TUE,
WEN,
THU,
FRI,
SAT,
}today;
*/
/*定义方法3:同时定义枚举类型和变量
enum week
{
SUN, // SUN = 0
MON, // MON = 1;
TUE,
WEN,
THU,
FRI,
SAT,
}today,yestaday;
*/
/*定义方法4:
typedef enum week
{
SUN, // SUN = 0
MON, // MON = 1;
TUE,
WEN,
THU,
FRI,
SAT,
}week;
*/
typedef enum
{
SUN, // SUN = 0
MON, // MON = 1;
TUE,
WEN,
THU,
FRI,
SAT,
}week;
int main(void)
{
/* 测试定义方法1
enum week today;
today = SUN;
printf("today is %dth \n",today);
*/
/*测试定义方法2 3
today = SUN;
yestaday = SAT;
printf("today is %dth \n",today);
printf("yestaday is %dth \n",yestaday);
*/
/*测试定义方法4 5
week yestaday;
yestaday = SAT;
printf("yestaday is %dth \n",yestaday);
*/
return 0;
}