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.
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.