C、Lisp、TeX --- これらの愉快な言語に共通する要素の1つが Macro です。Wikipedia の Macro の頁には、この抽象化の仕組みを持つプログラミング言語としてさらに PHP も挙げられています。
しかしそれぞれで同じ Macro と呼ばれている仕組みは、構文から展開処理に至るまで、お互いに非常に異なっています。例えば、C は preprocessor がソースコードの一部を置換する対象としての Macro を備えています。TeX では組み込みの定義用 control sequence を使って別の control sequence を Macro として定義することができ、これらの要素は構文解析のある段階で全て展開されます。Lisp では Macro によって複雑な S 式を生成するより単純な DSL を実現できます。
一方で、Macro を持たない言語の中にはそれに代わる便利な仕組みを持っているものもあり、「Macro は不要」、またはより穏やかに「Macro は避けるべき」という意見もあります。特に「Macro によってソースの可読性が損われる場合がある」というのがその理由として挙げられます。可読性という基準はやや主観的ですが、"cpp considered harmful" で議論されているように、「API の実装に Macro を使うと不都合が生じやすい」という意味に解釈をすると理解を得られるかもしれません。