Search code examples
cvariablesenumsdefinitiontypedef

What can I do with an enum variable?


When I declare a enum variable like this:

enum paint_colors { RED, GREEN, BLUE, ...} colors;

is the colors variable useful? If so, what can I do with it?

Thanks in advance.


Solution

  • Internally, an enum is treated as an integer that can only hold a limited range of values. In this case, the constants RED, GREEN, BLUE, ... will be defined and will be equal to 0, 1, 2, ... (respectively). The variable colors can be used anywhere an int can be used. You can use operators like ++ to iterate through the list of colors. The only difference between declaring enum paint_colors colors and int colors is that the enumerated variable can should only be assigned one of the enumerated constants.

    This gives you several benefits over using #define to create a series of constants and using a normal int for colors. First, some debuggers can detect that colors is an enumerated type and will display the name of the enumerated constant instead of a numeric value.

    More importantly, this can add an additional layer of type checking. It is not required by the C standard, but some compilers check and make sure that values assigned to a variable of enumerated type correspond to one of the enumerated constants.

    Mentally, you can almost think of this is similar to saying:

    #define RED    0
    #define GREEN  1
    #define BLUE   2
    typedef int paint_colors;
    paint_colors colors;
    

    The variable is treated like an int, but explicitly giving it a different type helps to clarify what the variable is and what it is used for.