I would think of it as more code that generates code, or functions that get called at compile time rather than run time.
I've had code that I copied and pasted, and changed, but couldn't factor out into a separate function easily. In those cases, a macro to write the code would have worked nicely.