a macro could conceivably expand to create an extremely inefficient code construct, thus causing runtime performance penalties.
But that's not the fault of the macro, it's the fault of the construct created using those macros (which might be hidden from view by the macro in code, making it harder to detect reading that code, but again that's merely a side effect of using macros).