C doesn't exactly have macros. That's a text substitution done by the preprocessor in its own limited, special-purpose language. True hygienic macros of something like Common Lisp are a different beast.
If all you want are textual substitutions, you can use the C preprocessor in front of any language.