一种利用宏来解决enmu的字符串名称的问题

有时会有这种需求

enum Fruit
{
    F_APPLE,F_BANANA,F_SHIT
};
const char *fruit_name[]={"APPLE","BANANA","SHIT"};
void print(Fruit f)
{
    puts(fruit_name[f]);
}

这段代码声明了一个枚举类型,以及对应的字符串的名称
问题是,当你对枚举类型修改的同时,你也需要对字符串名称进行修改
这样维护起来很麻烦
下面提供一种利用宏来解决这个问题的方案

#define FRUIT_LIST(f) f(APPLE),f(BANANA),f(SHIT)
#define GET_ENUM_NAME(NAME) F_##NAME
#define GET_STRING_NAME(NAME) #NAME
enum Fruit
{
    FRUIT_LIST(GET_ENUM_NAME)
};
const char *fruit_name[]={FRUIT_LIST(GET_STRING_NAME)};
void print(Fruit f)
{
    puts(fruit_name[f]);
}

唯一麻烦的地方在于,你需要把枚举类型写在FRUIT_LIST的定义中,并且要套在f()的里面

你可能感兴趣的:(一种利用宏来解决enmu的字符串名称的问题)