home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / snip1091.arj / ENUMS.TXT < prev    next >
Text File  |  1991-09-21  |  2KB  |  48 lines

  1.   Here are two of my favorites...
  2.  
  3. typedef enum {ERROR = -1, FALSE, TRUE} logical;
  4. #define BOOL(x) (!(!(x)))                       /* always TRUE or FALSE */
  5.  
  6. /* (trivial) Example code follows               */
  7.  
  8. #define MAX_VAL 10000                           /* data upper bound     */
  9. #define MIN_VAL -37                             /* data lower bound     */
  10.  
  11. logical testfunc(int intvalue)
  12. {
  13.         if (MAX_VAL < intvalue || MIN_VAL > intvalue)
  14.                 return ERROR;                   /* if out of bounds     */
  15.         else    return BOOL(intvalue);          /* zero returns FALSE,
  16.                                                    anything else is TRUE*/
  17.  
  18.  And, speaking of enumerated data types (which we can feel free to do
  19. since they're now "official" with the adoption of ANSI C), these are very
  20. handy when defining lists of data which may need to be appended in the
  21. future. If you define your enums this way:
  22.  
  23. enum CARS {CARS_MIN, FORD, CHEVY, PLYMOUTH, CARS_MAX};
  24.  
  25. ...then you can write "expandable" code as follows:
  26.  
  27. logical real_car(enum CARS my_car)
  28. {
  29.         if (CARS_MIN >= my_car || CARS_MAX <= my_car)
  30.                 return FALSE;
  31.         else    return TRUE;
  32. }
  33.  
  34. By including `CARS_MIN' and `CARS_MAX' as dummy enumerations, you can
  35. change the declaration to:
  36.  
  37. enum CARS {CARS_MIN, FORD, CHEVY, PLYMOUTH, LAMBORGHINI, FERRARI, CARS_MAX};
  38.  
  39. ...and all your existing code will still work properly, allowing you to
  40. spend your time writing new code to support the new enumerations rather
  41. than going back to fix any bounds checking you may have already written.
  42. In addition if, within the enum declaration, you declare `CARS_MIN = -1',
  43. then you can also include this handy little bit of expandable code:
  44.  
  45.         printf("Right now, I know about %d type%s of CARS\n", CARS_MAX,
  46.                 &"s"[1 == CARS_MAX]);
  47.