小規模な関数で,関数呼び出しのオーバーヘッドを気にする場合には, 関数をマクロとして記述することがある.標準入出力ライブラリの getchar()やputchar()などもマクロだ. マクロを使う場合,例えば次のような記述になる.
#define transpose(a) { ¥ int z; z = (a).x; ¥ (a).x = (a).y; ¥ (a).y = z; ¥ }
しかし,マクロを使う 場合,次のような問題がある.
複数のファイルで同じインライン関数を使う場合には, マクロと同じように,ヘッダファイルに関数を記述する.また, 前述のように,構造体定義の中でメンバ関数の本体を定義すると, そのメンバ関数はインライン展開の対象となる.inline void transpose(vector2D& a) { int z; z = a.x; a.x = a.y; a.y = z; }