Could you expand on this? I'm really curious why you think so. I have written and worked with C codebases that do quite well without using macros at all.
It could be portability stuff, like compiler-dependent attributes.
It could be fixing shortcomings of the languages without a huge complicated system that needs to be built into the language (and if it isn't, you can't just switch languages).
It could be dirty hacks that abstract a problem at the syntactic level (this is the kind of macro that is most likely to be replaced).