GetDunne Wiki

Notes from the desk of Shane Dunne, software development consultant

User Tools

Site Tools


enum_class_rather_than_typedef_enum

This is an old revision of the document!


C++ enum declaration vs. C "typedef enum"

The notion of enumeration type was added to the C language in the ANSI C standard, first published in 1989, after the C language had already been in widespread use for a decade. The variable declaration

enum { kCat, kDog, kCow, kHorse } animal;

declares an integer variable animal, which is supposed to have only four permissible values, identified by the symbolic constant names kCat, kDog, kCow, and kHorse. It's common to see enum used together with typedef, to define an “enum type” (especially in a .h header file) which can subsequently be used to declare any number of variables with the same set of permissible values, e.g.

typedef enum { kCat, kDog, kCow, kHorse } Animal;
...
Animal rover, spot, dobbin;

This looks very nice, and it's tempting to think that we have succeeded in defining a truly new data-type, but the reality is quite different. The problems are suggested by the very words I just used:

  • “integer variable”
  • “supposed to have… permissible values''
  • “symbolic constant names”
enum_class_rather_than_typedef_enum.1504220710.txt.gz · Last modified: 2017/08/31 23:05 by shane