/** based on this solution: http://stackoverflow.com/a/10966395 */ /** Macros to auto-generate enum and to string function */ #define GENERATE_ENUM_LINE(PREFIX, ENUM) PREFIX##_##ENUM, #define GENERATE_ENUM_CASE_STRING(PREFIX, ENUM) case PREFIX##_##ENUM: return #ENUM; #define GENERATE_ENUM(NAME, MEMBERS) \ enum NAME { MEMBERS(NAME, GENERATE_ENUM_LINE) }; \ static const char * NAME##String (enum NAME e) \ { \ switch (e) { MEMBERS(NAME, GENERATE_ENUM_CASE_STRING) } \ return("Unknown Type"); \ } /** define enum */ #define FRUIT_ENUM_MEMBERS(NAME, FRUIT) \ FRUIT(NAME, apple) \ FRUIT(NAME, orange) \ FRUIT(NAME, grape) \ FRUIT(NAME, banana) /** and then generate it */ GENERATE_ENUM(fruitEnum, FRUIT_ENUM_MEMBERS) /** use enum and string converter */ #include <stdio.h> int main() { enum fruitEnum e; e = fruitEnum_apple; printf("e = %s\n", fruitEnumString(e)); e = fruitEnum_apple; printf("e = %s\n", fruitEnumString(e)); e = fruitEnum_orange; printf("e = %s\n", fruitEnumString(e)); e = fruitEnum_grape; printf("e = %s\n", fruitEnumString(e)); e = fruitEnum_banana; printf("e = %s\n", fruitEnumString(e)); e = -1; printf("e = %s\n", fruitEnumString(e)); return 0; }
enum name to string generator
Leave a reply