Nothing like this exists as a compiler extension to GCC (that I can find). The only thing close is the Function Names as Strings extension.
You're better off doing it in a portable fashion:
Code:
#include <stdio.h>
typedef enum
{
value_1,
value_2,
value_3,
} MyEnum;
/*---------------------------------------------------------------------------*/
#ifndef NDEBUG
/*---------------------------------------------------------------------------*/
typedef struct
{
MyEnum val;
const char *val_name;
} MyEnum_TxtMap;
static const MyEnum_TxtMap g_MyEnum_TxtMap[] =
{
{value_1, "value_1"},
{value_2, "value_2"},
{value_3, "value_3"},
};
const char* MyEnum2Text(MyEnum val)
{
const size_t map_sz = sizeof(g_MyEnum_TxtMap) / sizeof(*g_MyEnum_TxtMap);
size_t n = 0;
for (; n < map_sz; ++n)
{
if (g_MyEnum_TxtMap[n].val == val)
return g_MyEnum_TxtMap[n].val_name;
}//for
return "!!invalid MyEnum val!!";
}
/*---------------------------------------------------------------------------*/
#else /* NDEBUG */
/*---------------------------------------------------------------------------*/
const char* MyEnum2Text(MyEnum val)
{
return "!!non-debug build!!";
}
/*---------------------------------------------------------------------------*/
#endif /* NDEBUG */
/*---------------------------------------------------------------------------*/
int main()
{
MyEnum val = value_2;
printf("val = %s\n", MyEnum2Text(val));
return 0;
}
gg