枚举变量的使用
背景:
枚举变量作为结构体成员,遍历结构体数组判断对象是不是属于某个枚举类型,并打印枚举类型名称的字符串。
难点:
- 枚举的使用及结构体中如何声明枚举对象?
- 如何判断枚举类型是否等于多个目标类型中的某一个?
- 如何打印枚举类型的字符串?
解决方案:
-
枚举使用和struct类似,可以用typedef的方式起别名,声明或定义枚举的时候更简洁,
-
遍历结构体数组时,用switch case判断枚举类型,用宏定义的方式减少代码量。
-
c中#号可以将变量名转换为字符串,另外##用于拼接两个变量名,如
varA##varB
输出varAvarB
。
案例
有AAA,BBB,CCC三个枚举类型,需要判断结构体数组中枚举类型为AAA或BBB的结构体,打印其枚举类型名称字符串和对应varnum;
源代码
#include <stdio.h>
#include <string.h>
#include <stdint.h>
typedef enum
{
AAA,
BBB,
CCC
} VARNAME;
typedef struct
{
VARNAME varName;
uint32_t num;
} VARINFO;
#define EUNMPRINTCASE(type) \
case type: \
printf("name is %s, num is %d\n", #type, arr[i].num); \
break;
int main()
{
VARINFO arr[2] = {
{AAA, 10},
{CCC, 20}};
for (uint32_t i = 0; i < sizeof(arr) / sizeof(VARINFO); i++)
{
switch (arr[i].varName)
{
EUNMPRINTCASE(AAA);
EUNMPRINTCASE(BBB);
default:
break;
}
}
}