The Preprocessor Iceberg Meme
Macro systems inevitably wind up being used to create a specialized undocumented language that nobody but its creator understands.<p>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.<p>But, eventually, I removed all the macro usage, and quite preferred the resulting code. It was cleaner and easier to read.<p>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.<p>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.<p>Macros - just say no.