http://kor.i2p/books/The%20C%20Programming%20Language%20by%20K&R/chapter6.html
Each
identifier in a program has certain information associated with it, for
example, whether or not it is a keyword, whether or not it is external and/or
static, and so on. The most compact way to encode such information is a set
of one-bit flags in a single char or int . The usual way this is done is to define a set of ``masks'' corresponding to
the relevant bit positions, as in #define KEYWORD 01
#define EXTRENAL 02
#define STATIC 04 or enum {...