/* declare items of the enum */
#define FOREACH \\
      X(item1) \\
      X(item2) \\
      X(item3) \\
/* end of list */

/* define the enum values */
#define X(id) MyEnum_ ## id,
enum MyEnum { FOREACH };
#undef X

/* convert an enum value to its identifier */
const char * enum2string(int enumValue)
{
    const char* stringValue = NULL;
#define X(id) if (enumValue == MyEnum_ ## id) stringValue = #id;
    FOREACH
#undef X
    return stringValue;
}

Next you can use the enumerated value in your code and easily print its identifier using :

printf("%s\\n", enum2string(MyEnum_item2));