Skip to content

Instantly share code, notes, and snippets.

@linneman
Created July 14, 2016 08:23
Show Gist options
  • Save linneman/99ff9ff86d7b4c69604b012bfcc4c258 to your computer and use it in GitHub Desktop.
Save linneman/99ff9ff86d7b4c69604b012bfcc4c258 to your computer and use it in GitHub Desktop.
how to stringify an enumeration type in C
#include <stdio.h>
#include <stdio.h>
#define ENUM_BODY(name, value) \
name value,
#define AS_STRING_CASE(name, value) \
case name: return #name;
#define DEFINE_ENUM(name, list) \
typedef enum { \
list(ENUM_BODY) \
}name;
#define AS_STRING_DEC(name, list) \
const char* name##AsString(name n);
#define AS_STRING_FUNC(name, list) \
const char* name##AsString(name n) { \
switch (n) { \
list(AS_STRING_CASE) \
default: \
{ \
static char int_as_string[8];\
snprintf( int_as_string, sizeof(int_as_string), "%d", n ); \
return int_as_string; \
} \
} \
}
#define ENUM_DAYS_OF_THE_WEEK(_) \
_(Monday, = 0) \
_(Tuesday, = 1) \
_(Wednesday, ) \
_(Thursday, = 46) \
_(Friday, ) \
_(Saturday, ) \
_(Sunday, = 99)
DEFINE_ENUM(DayOfTheWeek, ENUM_DAYS_OF_THE_WEEK)
AS_STRING_DEC(DayOfTheWeek, ENUM_DAYS_OF_THE_WEEK)
AS_STRING_FUNC(DayOfTheWeek, ENUM_DAYS_OF_THE_WEEK)
int main()
{
DayOfTheWeek d = Tuesday;
printf("%s\n", DayOfTheWeekAsString(d) );
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment