The Preprocessor Iceberg Meme
Macro systems inevitably wind up being used to create a specialized undocumented language that nobody but its creator understands.I know how enticing they are, I designed and implemented one myself for the ABEL programming language. I used lots of clever C macros in my C programming, and was proud of them.But, eventually, I removed all the macro usage, and quite preferred the resulting code. It was cleaner and easier to read.It's not just C macros. It's the same for assembler macros. I've heard from others it's the same for other languages that rely on macros.Essentially, macros are a cheap way to add power to a language. A better way is to add proper metaprogramming features. This is the route we chose to go with D, and it is satisfyingly successful.Macros - just say no.