Despite the fact that many folks I respect swear by macros, I've yet to feel comfortable with them in a language. Since LL2, I've been trying to figure out what my resistance is based on.
Let me say that I think that macros are beautiful and powerful and all those good things. Let's not quibble about that.
Defining a macro is often an act of defining a language construct and implementing it. Reasonably or not, I hold language constructs to a higher standard than, say, a mere function definition. Specifically,
* I expect language constructs to be implemented perfectly. I must trust my compiler.
* I expect language constructs to be documented precisely. I must trust the documentation.
I know precious few programmers who document well at all, much less to the level I expect in a language definition, and I know precious few programmers who implement and test their own code to the level expected in a compiler. Therefore, I'd expect more problems from macros than benefits.
Are these technical reasons? No. But they are practical reasons, and ultimately I program practically. Macros may be great for individuals and small groups, but I just don't believe that they scale for these non-technical reasons.