每个枚举常量对应一个整形数字,很多时候可以像整形一样使用.但枚举类型也有不方便的地方.比如不能直接输出枚举类型的字符串常量.举例说明.定义了枚举类型:
typedef enum
{
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
} t_Week;
在程序中定义了变量t_Week vl_Week=SUNDAY;
如果想用printf("The Week is %s".,vl_Week);之类的语句直接输出The Week is SUNDAY.
是做不到的,无论采用%s或%d,或者在vl_Week前加强制类型转换.
有以下几个方法可以实现.
1.使用switch-case进行装换
char * StringDirectionT(t_Week vp_Week)
{
switch(vp_Week)
{
case SUNDAY : return "SUNDAY";
case MONDAY : return "MONDAY";
case TUESDAY : return "TUESDAY";
case WEDNESDAY : return "WEDNESDAY";
case THURSDAY : return "THURSDAY";
case FRIDAY : return "FRIDAY";
case SATURDAY : return "SATURDAY";
default : printf("Illegal direction value!\n;
}
}
然后用语句printf("The Week is %s \n",StringDirectionT(vl_Week));
2.使用数组
char *a_Week[] = { "SUNDAY", "MONDAY", "TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","FRIDAY","SATURDAY"};
然后直接根据vl_Week的值去对应的数组元素
3.使用宏定义
#define enumToStr(WEEEK) "\""#WEEK"\""
printf("The Week is %s",enumToStr(vl_Week));