They improve readability but they are also defined as constant values, which is the other important thing. Who would remember all of the Win32 Error Codes? This is the reason why these are declared as macro's for instance. In a program where you have to define maybe a type of some kind of object, lets say a type of car for instance. Why store them as bulky strings to keep the readability? And why store them as integers where you have to refer to some kind of comment (if provided presumably), for which integer value represents which car? Keep in mind, strings are variable length, integers are typically 4 bytes per 32 bit integer. This would thus also improve the performance of your application slightly, and is much cleaner than dealing with strings. Enumerations also group identifiers together, as named integral values, which is the last but not least, important thing to note about them. With intellisense, it is easy to see all of what that enumeration details.