Inline::C

C では簡単な関数を書く代わりにプリプロセッサのマクロを使用して処理をさせていました。#define min(x,y) *1 と展開されてしまい、結果的に x は2つ加算されてしまいます。これは非常にわかりづらいバグの誕生です。インライン関数ではこのようなことは起こりません。
マクロの利点

マクロはコンパイラがプログラムをコンパイルする前にプリプロセッサが行うものです。ですからさまざまなトリッキーな事ができます。たとえば、プログラムからは『変数名』を出力するには実際に文字列として変数名を書き込む以外の手段はありません。マクロを使えば変数名も簡単に文字列にできます。以下のマクロは変数名とその値をプリントする物です。
#define INVALID_PRINT(s) printf(#s " is invalid: %d\n", s);

これは展開されると以下のようになります。
INVALID_PRINT(x); → printf("x is invalid: %d\n", x);

マクロを使えば、変数の値でなく変数名そのものを文字列化することが可能です。C/C++ の機能からは直接手で文字列を書く以外は不可能です。このように C/C++ では実現できないマクロ固有の機能を使う場合にはマクロを使う価値があります。
Caution インライン関数の注意

http://www.mars.dti.ne.jp/~torao/program/cpp/inline.html

*1:x