enum foo { FOO_THING_ONE, FOO_THING_TWO, FOO_THING_THREE, ... FOO_THING_SEVEN_HUNDRED }; // Using concatenate '##' and stringify '#' operators #define FANCYCASE(X) case FOO_THING_##X: str=#X; break const char *foo_to_str(enum foo myFoo) { char *str; switch(myFoo) { FANCYCASE(ONE); FANCYCASE(TWO); FANCYCASE(THREE); ... FANCYCASE(SEVEN_HUNDRED); } return str; }