Extern インライン関数

ISO C++ 標準では、インライン関数を使用する場合は必ずその関数を定義することが規定されています。C++ コンパイラは、インライン関数の複数のウトオブラインコピーが競合しないように、アウトオブライン extern 関数を共通セクションに生成します。

Show/hideアウトオブラインインライン関数

コンパイラは、以下の場合にインライン関数のアウトオブラインコピーを生成します。

  • 以下のように関数のアドレスを受け取る場合。

    inline int g()
    {
        return 1;
    }
    int (*fp)() = &g;
    
  • 再帰関数のように関数をインラインにできない場合。

    inline unsigned int fact(unsigned int n) {
        return n < 2 ? 1 : n * fact(n - 1);
    }
    
  • コンパイラで使用されるヒューリスティックにより、その関数をインライン展開しない方がよいと判断される場合。このヒューリスティックは、-Ospace および -Otime の影響を受けます。-Otime を使用すると、コンパイラではより多くの関数をインライン展開します。__forceinline を指定して関数を宣言することで、このヒューリスティックをオーバーライドできます。以下に例を示します。

    __forceinline int g()
    {
        return 1;
    }
    

    詳細については、--forceinlineも参照して下さい。

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711