有時會有這種需求
enum Fruit
{
F_APPLE,F_BANANA,F_SHIT
};
const char *fruit_name[]={"APPLE","BANANA","SHIT"};
void print(Fruit f)
{
puts(fruit_name[f]);
}
這段代碼聲明了一個枚舉類型,以及對應(yīng)的字符串的名稱
問題是,當你對枚舉類型修改的同時,你也需要對字符串名稱進行修改
這樣維護起來很麻煩
下面提供一種利用宏來解決這個問題的方案
#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()的里面