Earlier quoted context omitted.
Too much change isn't good though. There's value in consistent basics. I've seen people doing things like: #define BEGIN { #define END } because they liked Pascal, and that way lies madness.
Lets not equate silly and possibly dysfunctional string substitution macros with macros in higher level languages, which let you inspect and act according to the structure of the AST.
If you want to make a special use tool, you can write a function like custom_if(cond, then_callback, else_callback) in most languages.
Maybe I'm just getting old, but as time goes by I like it more and more when things are obvious and non-magical.