Tutorial 3 on Enum variables published

This is the third in a series of C Tutorials that I originally published on about.com between 2006 and 2013. I’m republishing them on here. This time it’s about enum variables. While these aren’t anywhere as important as say in C++ or other languages (because C’s type checking is not great!) they make the program more readable.
I see them as banishing magic numbers. A magic number is a number in a program that is just there. Like when you declare an array and use the number 20. That is a magic number and it would be better if there was a #define NUMBERMONSTERS 20. This avoids the problem of your program being full of 20s until one day you change it to 30 but manage to miss a couple of them and you introduce bugs. By using NUMBERMONSTERS everywhere you can change it in just one place (at the #define) and avoid the problem of missing.
Enum variables are similar. Behind the scenes they are just ints. In other programming languages like C++, Pascal, C#, the compiler enforces the enum values. In those languages you can’t declare an enum variable then assign any int value to it, but in C you can. But they can at least make your program more readable.
The picture? Magic numbers!