主な機能は、マクロコードフラグメントオフキーワードインラインの代わりにすることです。
C ++でインライン関数を宣言するキーワードinlineキーワードを使用します。
インラインint型ファン(int型 A、int型B)は { 返す <:?のB B; // もし<Bまたは=確立B = A }
する#include <stdio.hの> に#define FUN(B)((A)<(B)(A):(B)) インラインint型の楽しい(INT A、INT B) { 戻り <bは?A:B; // 如果<B成立=否则= B } int型のmain(int型 ARGC、CHAR * ARGV []) { int型、A = 1、B = 3 。 INTヴァル= FUN(++ 、B)。 printf(" ... \ nを開始します" ); printf(" ヴァル=%d個の\ n " 、ヴァル)。 printf(" =%d個の\ n "a); のprintf(" B =%d個の\ n "B) のprintf(" 終了... N \ " ); 戻り0 ; }
マクロFUNを呼び出す場合 INTヴァル= FUNを(++ A、B)は、膨張がある INTヴァル=((++ A) <(B)(++ A):?(B)); ここで、valは= 3
この関数は楽しい呼び出される int型のval = 2
DESCRIPTIONマクロブロックのマクロブロックだけでやるという欠点があるように代替コンテンツが。
C ++インラインインラインで制限をコンパイル:
1は、ループのいずれかの種類がありません
2、過度の条件文が存在することはできません
3、関数の本体は大きすぎることはできません
4、書込み動作は、この機能を取って行うことができません
5、インライン関数の宣言は、文の前に呼び出さなければなりません。
インライン関数:
C ++コンパイラは、関数のインライン化をコンパイルすることができます
直接関数コール機能の本体のでない追加のインライン関数通常の関数コールのオーバーヘッドに挿入C ++コンパイラ。(プッシュ、ジャンプ、リターン)。
注意:C ++コンパイラは、必ずしも要求インライン関数を満たしていない、それは、インライン関数を宣言するためにinlineキーワードを使用することで可能性があると言うことですコンパイラによって拒否されます。これにより、インラインは失敗の確立
強制インライン:
C ++コンパイラは、拡張構文を提供し、インライン化を機能するように強制することができます
G ++:_attrbute _((always_inline))属性
MSVS:_forceinline