There are many ways to approach macros. Zig’s approach with compile time evaluation handles many of them. Esp since types can be created on the fly.
Another approach, which is strongly inspired by the ASTEC project for C, is what I use for my C-like “C3”: http://www.c3-lang.org/macros/
Zig’s clearly about a more homogeneous approach where I am happy to have multiple pieces of syntax to cover different usecases.