Structures & Enum - advanced
Internally, an enum uses integers and links these names to values. It
is possible to impose a value to a specific field, if you want to use
them numerically.
enum color
{
    GREEN,     /* If not specified, the first value is 0                   */
    RED,       /* Other values are the precedent value + 1. Here, RED == 1 */
    BLUE = 20, /* We impose BLUE == 20                                     */
    YELLOW     /* Not specified, YELLOW == BLUE + 1 == 21                  */
};
Here is a useful example that associates some data to each field:
void print_direction(enum direction dir)
{
    /* Mapping from direction to string */
    const char *map[] =
    {
        "north", "south", "east", "west"
    };
    printf("I am facing %s!", map[dir]);
}
An enumeration may be a field of a structure:
struct character
{
    int life;
    char name[25];
    enum direction dir;
};
/* Direct initialization syntax, just like arrays */
struct character mario =
{
    100, "Mario", NORTH
};
printf("It's a me, %s!", mario.name);