Can I display the value of an enum with printf()? Can I display the value of an enum with printf()? c c

Can I display the value of an enum with printf()?


As a string, no. As an integer, %d.

Unless you count:

static char* enumStrings[] = { /* filler 0's to get to the first value, */                               "enum0", "enum1",                                /* filler for hole in the middle: ,0 */                               "enum2", "enum3", .... };...printf("The value is %s\n", enumStrings[thevalue]);

This won't work for something like an enum of bit masks. At that point, you need a hash table or some other more elaborate data structure.


enum MyEnum{  A_ENUM_VALUE=0,   B_ENUM_VALUE,   C_ENUM_VALUE};int main(){ printf("My enum Value : %d\n", (int)C_ENUM_VALUE); return 0;}

You have just to cast enum to int !
Output : My enum Value : 2


The correct answer to this has already been given: no, you can't give the name of an enum, only it's value.

Nevertheless, just for fun, this will give you an enum and a lookup-table all in one and give you a means of printing it by name:

main.c:

#include "Enum.h"CreateEnum(        EnumerationName,        ENUMValue1,        ENUMValue2,        ENUMValue3);int main(void){    int i;    EnumerationName EnumInstance = ENUMValue1;    /* Prints "ENUMValue1" */    PrintEnumValue(EnumerationName, EnumInstance);    /* Prints:     * ENUMValue1     * ENUMValue2     * ENUMValue3     */    for (i=0;i<3;i++)    {        PrintEnumValue(EnumerationName, i);    }    return 0;}

Enum.h:

#include <stdio.h>#include <string.h>#ifdef NDEBUG#define CreateEnum(name,...) \    typedef enum \    { \        __VA_ARGS__ \    } name;#define PrintEnumValue(name,value)#else#define CreateEnum(name,...) \    typedef enum \    { \        __VA_ARGS__ \    } name; \    const char Lookup##name[] = \        #__VA_ARGS__;#define PrintEnumValue(name, value) print_enum_value(Lookup##name, value)void print_enum_value(const char *lookup, int value);#endif

Enum.c

#include "Enum.h"#ifndef NDEBUGvoid print_enum_value(const char *lookup, int value){    char *lookup_copy;    int lookup_length;    char *pch;    lookup_length = strlen(lookup);    lookup_copy = malloc((1+lookup_length)*sizeof(char));    strcpy(lookup_copy, lookup);    pch = strtok(lookup_copy," ,");    while (pch != NULL)    {        if (value == 0)        {            printf("%s\n",pch);            break;        }        else        {            pch = strtok(NULL, " ,.-");            value--;        }    }    free(lookup_copy);}#endif

Disclaimer: don't do this.