MC logo
Enum Declaration
[^] Code Examples
<<Unsigned Pitfalls enum.c Typedef Declaration>>
/* C enumerate type creates symbolic names.  The names have integer
   values. */
#include <stdio.h>

/* This assigns the names Sun through Sat to the values 0 through 6.
   They are constants, and cannot be changed.  It also defines the
   tag daynames which can be used to declare a variable of this type. */
enum daynames { Sun, Mon, Tue, Wed, Thu, Fri, Sat};

/* This just defines the names */
enum {SEC = 1, MIN = 60, HOUR = 60*60, DAY = 24*60*60};

int main()
        /* Declare a variable of type enum daynames.  It is really 
           just an integer, of some size picked by the implementation
           large enough to hold all the enumeration values. */
        enum daynames today;

        /* This defines some names, each one taking the value one greater
           if than the last, if not given a specific value.  The variable
           dd can hold any of the enumeratoin values. */
        enum { DINK, DANK = 5, DUNK, DONGLE = 4, DANGLE, DROP } dd;
        int n;

        /* Days of the week.  These are just integer codes. */
        for(today = Mon; today <= Fri; ++today)
                printf("%d ", today);

        /* Using the second value constants. */
        printf("Three days, four hours, and 28 minutes is %d seconds.\n",
               3*DAY + 4*HOUR + 28*MIN);

        /* Enum type variables are just integers.  Enum values are just
           integers. */
        dd = 2;
        printf("%d %d %d %d %d %d %d\n", DINK, DANK, DUNK, DONGLE, DANGLE, 
               DROP, dd);

The identifier after the enum keyword (daynames for instance), is called in tag. In C++, it is also a type name, just as the name of a class. In plain C, it can be used with the enum keyword to create variables of the enumerated type.

Some languages, such as Pascal and Ada, contain a carefully designed and restricted enumerated type. The C version is much more flexible, or useless, depending on your viewpoint.

Reading: pp. 185-186
<<Unsigned Pitfalls Typedef Declaration>>