With great power...
Although, we've spent an entire chapter on macros and how awesome they are, a word of caution is required. Seldom use macros. That's worth repeating: _seldom_
use macros! Macros have the very real possibility of creating enormous complexity and technical debt—they have the ability to change the core semantics of the language. This can result in very difficult code to read and reason about. Thus, reaching for the macro system should be taken with a great amount of thought. Ask questions and poke the problem, really determine whether using macros is a good choice or not. Several questions may be:
Is the problem tractable via macros or can the problem be easily expressed via macros? More so than not using macros?
Is there significant overhead on the caller of using macros?
If either of these are answered negatively, it's likely that choosing macros is a bad move.
If both are answered positively, go forth and incur the complexity at the benefit of an elegant solution that may...