#define TASK_STATUS_ENUM(VALUE) ts##VALUE #define TASK_STATUS_ENUM_COMA(VALUE) TASK_STATUS_ENUM(VALUE) , #define TASK_STATUS_VALUES(_) _(Normal) _(ModifiedLocally) _(CreatedLocally) enum TaskStatus { TASK_STATUS_VALUES(TASK_STATUS_ENUM_COMA) }; #define STRINGIFY_VALUE(v) "ts" #v #define ENUM_TO_STR(x) if (status == TASK_STATUS_ENUM(x)) return STRINGIFY_VALUE(x); char* enumToStr(TaskStatus status) { TASK_STATUS_VALUES(ENUM_TO_STR); return STRINGIFY_VALUE(Normal); }