It was inspired out of frustration and hassle with maintaining synchronisation between option flag lists, global variables and usage information. The desire for more than #define macros came about when it became apparent that macros alone were insufficient for reducing the maintenance into a single option list.