インライン関数
古いC言語(C89)などでは、インライン展開をソースレベルの引数付きマクロで実現してきた。インライン関数はマクロに比べて次のような利点がある。
マクロ呼び出しは型チェックをしない。また、引数が正しい形式であるかもチェックしない。インライン関数呼び出しではこれらがチェックされる。
C言語のマクロは単なる文字列の置換であり、予期せぬ副作用や、引数の評価を複数回行ってしまうことによる弊害が生じることがある。インライン関数はそのような副作用をもたらさない。
マクロ内部でのコンパイルエラーは、マクロ展開後のコードで発生するため、プログラマにとっては理解が難しくデバッグに時間がかかることがある。インライン関数はコンパイラが処理するため、コンパイルエラーの発生個所および原因の特定もしやすい。
マクロ内では構文が制限され、通常とは異なった書き方を要求される。インライン関数は通常の関数と全く同じであり、インライン化するかどうかも自由に決定できる。
インライン化されたコードのデバッグ情報はマクロを展開したコードよりも扱いやすい。ブレークポイントの作成も可能である。
多くのコンパイラではある種の再帰呼び出し関数もインライン展開できる。再帰的マクロは一般に不正である。
これらの利点は、マクロを使用したジェネリックプログラミングに対する、C++の関数テンプレートのメリットと同様である。
C++の設計者ビャーネ・ストロヴストルップは、マクロよりもインライン関数を使うべきだと主張している。