インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

inline、noinline、forceinline

文内のすべての呼び出しのインライン展開を指定します。 forceinlinenoinline プラグマについても示します。

構文

#pragma inline [recursive]

#pragma forceinline [recursive]

#pragma noinline

引数

recursive

一連の呼び出しの中で呼び出されるすべての呼び出しに対して再帰的にプラグマを適用します。

説明

これらは特定の文に対するインライン展開プラグマです。C/C++ 文の前に置いて、その文内のすべての呼び出しと、その文内にある入れ子された文内のすべての呼び出しに適用することができます。

forceinline プラグマは、コンパイラーがその呼び出しをインライン展開できる場合には、常にインライン展開するように指示します。

inline プラグマは、コンパイラーのヒューリスティックによって、過剰なインライン展開、ソースコードのコンパイル処理速度の大幅な低下、実行ファイルサイズの大幅な増加、またはパフォーマンスの低下を招くことが判断された場合を除き、その呼び出しをインライン展開するようにコンパイラーに指示します。

noinline プラグマは、その呼び出しをインライン展開しないように指示します。

特定の文に対するプラグマは、特定の関数に対するプラグマよりも優先されます。

forceinline recursive プラグマの使用例

#include <stdio.h> 

static void fun(float a[100][100], float b[100][100]) {
  inti , j;
  for (i = 0; i < 100; i++) {
    for (j = 0; j < 100; j++) {
      a[i][j] = 2 * i;
      b[i][j] = 4 * j;
    }
  } 
} 

static void sun(float a[100][100], float b[100][100]) {
  int i, j;

  for (i = 0; i < 100; i++) {
    for (j = 0; j < 100; j++) {
      a[i][j] = 2 * i;
      b[i][j] = 4 * j;
    }
    fun(a, b);
  } 
} 
static float a[100][100]; 
static float b[100][100]; 

extern int main() {
  int i, j;

  for (i = 0; i < 100; i++) {
    for (j = 0; j < 100; j++) {
      a[i][j] = i + j;
      b[i][j] = i - j;
    }
  }
  for (i = 0; i < 99; i++) {
    fun(a, b); 
#pragma forceinline recursive
    for (j = 0; j < 99; j++) {
      sun(a, b);
    }
  }
  fprintf(stderr, "%d %d\n", a[99][9], b[99][99]); 
}

forceinline recursive プラグマが 'sun(a,b)' 呼び出しと 'sun(a,b)' の中の 'fun(a,b)' の呼び出しに適用されます。