C++ 言語アプリケーションでは、このオプションは関数のインラインを試行するようコンパイラーに指示します。インラインは可能であれば実行されますが、実行する最適化によってはインラインされない関数もあります。
C 言語アプリケーションでは、このオプションは、コンパイラーがインラインを試行する必要がある特定の関数を指定します。
構文の注意事項:
- C コンパイルのみ
C++ 言語では、以下の -Q オプションが適用されます。
-Q コンパイラーは、可能な関数をすべてインラインします。 -Q! コンパイラーは関数を一切インラインしません。
C 言語では、以下の -Q オプションが適用されます。
-Q -Q オプションに対する任意のサブオプションの設定に従って、実行可能なソース・ステートメントが 20 個以下の該当する関数をすべてインラインしようとします。 -Q を最後に指定した場合は、すべての関数がインラインされます。 -Q! 関数を一切インラインしません。 -Q! を最後に指定した場合は、関数は一切インラインされません。 -Q-names names にリストされた関数をインラインしません。names の関数名は、それぞれコロン (:) で分離します。他のすべての適切な関数はインラインされます。このオプションは、-Q を暗黙指定します。 例を以下に示します。
-Q-salary:taxes:expenses:benefits
これによって、salary、 taxes、expenses、または benefits という名前の関数以外のすべて関数が、可能であればインラインされます。
ソース・ファイルで定義されていない関数については、警告メッセージが出されます。
-Q+names names にリストされた関数およびすべての他の適切な関数をインラインしようとします。 names の各関数名は、コロン (:) で分離しなければなりません。このオプションは、-Q を暗黙指定します。 例を以下に示します。
-Q+food:clothes:vacation
これによって、インラインに適格なすべての他の関数とともに、可能な場合は、food、clothes、または vacation という名前の関数がすべてインラインされます。
ソース・ファイルで定義されていない関数、または定義はされているがインラインできない関数については、警告メッセージが出されます。
このサブオプションは、threshold 値の設定をすべてオーバーライドします。 -Q+names と一緒に threshold 値にゼロを使用して、特定の関数をインラインすることができます。例を以下に示します。
-Q=0これに以下を続けて指定します。
-Q+salary:taxes:benefitsこれによって、salary、taxes、または benefits という名前の関数のみ が、可能な場合にインラインされ、それ以外はインラインされません。
-Q=threshold インラインする関数に対してサイズの制限を設定します。実行可能ステートメントの数は、関数をインラインする場合は threshold 以下でなければなりません。 threshold は正の整数でなければなりません。デフォルト値は 20 です。 threshold の値に 0 を指定すると、__inline、_Inline、または _inline キーワードでマークされた関数以外の関数はインラインされません。
threshold の値は、論理 C ステートメントに適用されます。以下の例に示すように、宣言はカウントされません。
increment() { int a, b, i; for (i=0; i<10; i++) /* statement 1 */ { a=i; /* statement 2 */ b=i; /* statement 3 */ } }
デフォルトでは、インライン指定はコンパイラーに対する手掛かりとして扱われます。インライン化が行われるかどうかは、選択するほかのオプションにも依存することがあります。
-Q オプションは、 -qinline オプションと機能的に同等です。
-g オプションを (デバッグ情報を生成させるために) 指定した場合、インライン化は影響を受けることがあります。 -g コンパイラー・オプションの情報を参照してください。
インラインによって必ずしも実行時間が改善されるとは限らないため、コードに対するこのオプションの効果はユーザー自身がテストしなければなりません。
再帰的な関数または相互に再帰的な関数はインラインしないでください。
通常、最適化を要求する (-O オプション) と、アプリケーションのパフォーマンスが最適化され、最適化を要求しないとコンパイラーのパフォーマンスが最適化されます。
inline、_inline、 _Inline、および __inline 言語キーワードは、 -Q! 以外の -Q オプションをすべてオーバーライドします。コンパイラーは、その他の -Q オプションの設定に関係なく、これらのキーワードでマークされた関数をインラインしようとします。
最大限にインラインさせるには、以下を行います。
プログラム myprogram.c をコンパイルし、関数を一切インラインしないようにするには、以下を入力します。
xlc myprogram.c -O -Q!
プログラム my_c_program.c をコンパイルして、 12 行以下の関数のインラインをコンパイラーに試行させるには、以下を入力します。
xlc my_c_program.c -O -Q=12
コンパイラーのコマンド行オプション
g
inline
O、optimize
Q
inline、_Inline、_inline、および __inline 関数指定子