可變引數巨集與列舉

2021-07-30 11:54:19 字數 664 閱讀 5390

可變引數的巨集與列舉結合會產生什麼樣子的火花?

問題:有時候定義了列舉需要知道列舉值對應的字串表達,有點像反射的機制。該如何簡潔的實現而又不容易出錯?

基礎設施

#define enum_entry(name, value) name = value,

#define tostring(arg) #arg

#define enum_str_entry(name, value) \

case value: break;

#define enum_enumeration(name, item_list)\

struct name##enumdef;\

static std::string tostring(const enum& value) break;\

} \}\};

應用:

#define people_items(item_def, ...)\

item_def(name, 1)\

item_def(born, 2)\

item_def(nation, 3)

enum_enumeration(people, people_items)

int main()

可變引數巨集

在 gnu c 中,巨集可以接受可變數目的引數,就象函式一樣,例如 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadicmacros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 void printf con...

可變引數巨集

參考各可變引數的部落格,才寫出現在的部落格,有不準確之處,還望指出。1.先看些標準c中printf函式原型 標準c就支援可變引數巨集,也就意味著函式的引數是不固定的,例如printf 函式的原型為 int printf const char format,在gnu c中,巨集也可以接受可變數目的引數...

可變引數巨集

可變引數巨集 在 gnu c 中,巨集可以接受可變數目的引數,就象函式一樣,例如 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 void pr...