C Enum

Summary: in this tutorial, you will learn how to use the C enum keyword to define an enumeration type that enhances the code readability.

Introduction to the C enum #

Suppose that you need to write a program to manage software bugs. To represent the bug status such as open, assigned, and fixed, you may use integer constants. For example:

#include <stdio.h>


int main()
{
    // define the status of a bug
    int bug_status;

    // open
    bug_status = 0;

    // assigned
    bug_status = 1;

    // fixed
    bug_status = 2;

    return 0;
}Code language: C++ (cpp)

This solution definitely works. However, the code is not so obvious.

To check if a bug is new, you need to compare the bug_status variable with 0. By looking at the number 0, you will not immediately understand its meaning.

To solve this, C provides the enumeration type that allows you to declare an enumeration.

An enumeration is a set of named integer constants. The following program defines an enumeration type called STATUS and a variable bug_status with the type STATUS:

enum STATUS { open, assigned, fixed } bug_status;Code language: C++ (cpp)

After that, the bug_status can accept any value specified in the enumeration. For example:

bug_status = open;Code language: C++ (cpp)

The following program is the same as the one above but use the enumeration:

#include <stdio.h>

int main()
{
    // define the bug status enumeration
    enum STATUS {
        open,
        assigned,
        fixed
    } bug_status;

    // open
    bug_status = open;

    // assigned
    bug_status = assigned;

    // fixed
    bug_status = fixed;

    return 0;
}Code language: C++ (cpp)

The code looks obvious and more readable now.

C enum syntax #

enum enumeration_type_name
{
    // enumerator-list
}Code language: C++ (cpp)

Here’s the syntax of defining an enumeration type:

In this syntax:

  • First, specify the name of the enumeration type after the enum keyword.
  • Second, specify a comma-separated list of enumeration members.

For example, the following defines an enumeration type with the name RGB:

enum RGB { red, green, blue };Code language: C++ (cpp)

You can declare a variable with the RGB type like this:

enum RGB color = green;Code language: C++ (cpp)

Or you can combine the enumeration type declaration with the variable declaration like this:

enum RGB { red, green, blue } color;

color = green;Code language: C++ (cpp)

By default, the first member in the enumeration is 0. The next member has the value of the first member plus 1 and so on.

In the following enum:

enum RGB { red, green, blue };Code language: C++ (cpp)

The red is 0, green is 1, and blue is 2.

You can use the assignment operator to assign a member of the enumeration a value. For example:

#include <stdio.h>

int main()
{

    enum DAY {
        monday = 2,
        tuesday,
        wednesday,
        thursday,
        friday,
        saturday,
        sunday
    };

    enum DAY workday = monday;

    return 0;
}Code language: C++ (cpp)

In this example, we implicitly assign 2 to Monday. Therefore, Tuesday will take 3, Wednesday takes 4, and so on.

C enum and integers #

Since enumeration members are integers, you can use arithmetic operators on them. For example:

#include <stdio.h>

int main()
{

    enum DAY {
        monday = 2,
        tuesday,
        wednesday,
        thursday,
        friday,
        saturday,
        sunday
    };

    enum DAY workday = monday; // workday is 2

    workday = workday + 1; // now workday is 3

    printf("%d\n", workday); // 3

    return 0;
}
Code language: C++ (cpp)

How it works.

  • First, assign Monday to a workday variable. Since the Monday is 2, the workday is also 2.
  • Second, increase the workday by one and display the workday value. The program displays 3 as expected.

If you have an integer and want to cast it to an enumeration member, you must explicitly cast the value. For example:

#include <stdio.h>

int main()
{

    enum DAY {
        monday = 2,
        tuesday,
        wednesday,
        thursday,
        friday,
        saturday,
        sunday
    };

    enum DAY workday;

    int weekend = 7;

    workday = (enum DAY) weekend;

    printf("%d\n", workday); // 7

    return 0;
}
Code language: C++ (cpp)

In this example, the following statement casts an integer to the enum:

 workday = (enum DAY) weekend;Code language: C++ (cpp)

It’s important to note that C doesn’t require a cast; however, it is recommended. This means that you can do this:

 workday = weekend; // BADCode language: C++ (cpp)

Summary #

  • Use the enum keyword to declare an enumeration type.
  • The first member of the enumeration defaults to zero. The next member will take the first member’s value plus one, and so on.
  • Use the assignment operator (=) to explicitly assign the integer values to the enumeration members.
Was this tutorial helpful ?