Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 7/1/83; site rlgvax.UUCP Path: utzoo!linus!philabs!seismo!rlgvax!jeff From: jeff@rlgvax.UUCP Newsgroups: net.lang.c Subject: enums Message-ID: <754@rlgvax.UUCP> Date: Mon, 4-Jul-83 20:13:00 EDT Article-I.D.: rlgvax.754 Posted: Mon Jul 4 20:13:00 1983 Date-Received: Wed, 6-Jul-83 15:25:53 EDT Organization: CCI Office Systems Group, Reston, VA Lines: 37 As understand it, the enum type in C is a adaptation of one of Pascal's nicer features. Its motivation is not to enable types to be packed tighter than in ints, and definitely not to allow tricky combinations of enums and ints in expressions. Enums deliberately allow (or should allow) less flexibility than ints. The idea here is the general idea behind strong typing--have the person declare what something is, rather than how it is to be implemented, and disallow all expressions which involve disparate types which happen to have the same implementation. The things enums should replace were (and almost always still are) implemented as #define's. The signals (from SIGNAL(2) and signal.h) and the system call error numbers (INTRO(2) and error.h) are two prime examples of things begging to be made enums. Anyone trying arithmetic with them, or comparing them to ints, longs or chars, signed or unsigned, or for that matter, comparing them with others of the same type except for == and !=, is probably making a mistake and deserves to have a type cast forced on him. The object of the game with enums is to allow you less flexibility! If you are going to complain that you cannot add them to a pointer, you do not really want enums, and probably either do not understand or believe in, or both, their motivation, which is somewhat alien to C. So after all this, you ask, do I use enums. No, I don't. I have to port my code and many C compiler writers feel they need only obey the K&R book, and do not implement them well. For example, one compiler I have heard of disallows enums in switch statements, making them next to useless. They come from the same set of identifiers as ordinary identifiers, according to the "Recent Changes" document, which is sort of like not allowing two different ints to take the value 5. Enum constants, like int constants, are values--just not numeric. I may get up the courage to try them again someday. Jeffrey Kegler CCI Office Systems Division (formerly RLG) ...{allegra,seismo,mcnc,lime,we13,brl-bmd}!rlgvax!jeff