summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/enums.txt
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/enums.txt')
-rwxr-xr-xreference/C/CONTRIB/SNIP/enums.txt55
1 files changed, 55 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/enums.txt b/reference/C/CONTRIB/SNIP/enums.txt
new file mode 100755
index 0000000..ae88298
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/enums.txt
@@ -0,0 +1,55 @@
+Some of my favorites...
+-----------------------
+
+typedef enum {ERROR = -1, SUCCESS, FALSE = 0, TRUE} logical;
+#define BOOL(x) (!(!(x))) /* always TRUE or FALSE */
+
+/* (trivial) Example code follows */
+
+#define MAX_VAL 10000 /* data upper bound */
+#define MIN_VAL -37 /* data lower bound */
+
+logical testfunc(int intvalue)
+{
+ if (MAX_VAL < intvalue || MIN_VAL > intvalue)
+ return ERROR; /* if out of bounds */
+ else return BOOL(intvalue); /* zero returns FALSE,
+ anything else is TRUE*/
+}
+
+/* Examples using SUCCESS/ERROR */
+
+ if (SUCCESS == strcmp(my_string, "something"))
+ do_something();
+ if (ERROR == open("my_file", O_READ))
+ abort();
+
+ And, speaking of enumerated data types (which we can feel free to do
+since they're now "official" with the adoption of ANSI C), these are very
+handy when defining lists of data which may need to be appended in the
+future. If you define your enums this way:
+
+enum CARS {CARS_MIN = -1, FORD, CHEVY, PLYMOUTH, CARS_MAX};
+
+...then you can write "expandable" code as follows:
+
+logical real_car(enum CARS my_car)
+{
+ if (CARS_MIN >= my_car || CARS_MAX <= my_car)
+ return FALSE;
+ else return TRUE;
+}
+
+By including `CARS_MIN' and `CARS_MAX' as dummy enumerations, you can
+change the declaration to:
+
+enum CARS {CARS_MIN = -1, FORD, CHEVY, PLYMOUTH, FERRARI, CARS_MAX};
+
+...and all your existing code will still work properly, allowing you to
+spend your time writing new code to support the new enumerations rather
+than going back to fix any bounds checking you may have already written.
+In addition if, within the enum declaration, you declare `CARS_MIN = -1',
+then you can also include this handy little bit of expandable code:
+
+ printf("Right now, I know about %d type%s of CARS\n", CARS_MAX,
+ &"s"[1 == CARS_MAX]);