ISO C 以前は、マクロ置換のプロセスについて詳しく記述されていませんでした。この曖昧さにより、極めて多種多様な実装が生み出されました。明白な定数置換や簡単な関数のようなマクロよりも複雑なものに依存するコードは、おそらく正しく移植できませんでした。このマニュアルでは、古い C と ISO C 間のマクロ置換実装の違いをすべて説明することはできません。ほとんどすべてのマクロ置換の結果は、前とまったく同じトークンの連続になります。ただし、ISO C マクロ置換アルゴリズムは、古い C ではできなかったことができます。次の例は、すべての name の使用を name 経由の間接参照で置換することになります。
#define name (*name)
古い C プリプロセッサは数多くの括弧とアスタリスクを生成し、ときには、マクロの再帰についてエラーを生成する場合もあります。
ANSI/ISO C によるマクロ置換方法の主な変更は、マクロ置換演算子 # と ## のオペランド以外のマクロ引数が要求であること、置換トークンリストでの置換前に再帰的に展開することです。ただし、この変更によって、実際に生成されるトークンに差が生じることは滅多にありません。