In all seriousness though, it's basically supposed to teach about function pointers.
I would never, ever recommend programming like this.
In response to the macros, i think that would make the program particularly hard to reason about because part of the program would be rewritten at compile time.
I would discourage the use of macros. I believe that Brian Kernighan would agree with me.
As a rule of thumb, it is better to use enums over #defines and avoid macros like death. Stick to the most standard, simple parts of the language and your programs will be most readable and likely elegant.