I feel like this article needs some examples of extreme macro abuse such as the Unix v7 Bourne shell source.
Interesting article. I’ve written a lot of C macros, and it’s nice to see so much info in one place.
One thing not mentioned in the article, that I always thought was weird, is the defined operator. It’s useful because you can use it with other operators (e.g. || or &&), but I just find the syntax a weird special case.