C言語には#defineによるマクロ関数がありましたが、
これと似たインライン関数と言う機能があります。
インライン関数に指定するには、
関数の先頭にキーワードinlineを付加します。
インライン関数をつくり、
インライン関数呼び出し文が記述されているとすると、
インライン関数呼び出し文の箇所に、
インライン関数実体のコードがコピーされます。
もちろん引数や戻り値も正常に処理されます。
インライン展開前
#include <iostream>
using namespace std;
inline void tasizan(int a, int b);
void main(void) {
tasizan(10, 5); // この部分がインライン関数展開される
}
inline void tasizan(int a, int b) {
int ans = 0;
ans = a + b;
cout << ans << '\n';
}
インライン展開後
#include <stdio.h>
inline void tasizan(int a, int b);
void main(void) {
int ans = 0;
ans = 10 + 5;
cout << ans << '\n';
}
inline void tasizan(int a, int b) {
int ans = 0;
ans = a + b;
cout << ans << '\n';
}
普通の関数は、
関数実体がアプリケーションに1つしかありませんが、
インライン関数は、
インライン関数呼び出し部分の数だけ実体が存在する事になります。
コード量は多少増えますが、
関数呼び出し時のオーバーヘッドがない事や、
マクロと比べ、コードの安全性に優れているため、使い勝手が良いです。
また、インライン指定しても
場合により普通の関数として扱われる事もあります。
■参考ページ
C言語 #define – マクロ関数