一種利用宏來解決enmu的字符串名稱的問題

有時會有這種需求

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()的里面

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容