C++の入門者です。
表記の Inline Expansion に関する理解は、末尾に記したような内容で良いのですか?
IBMのサイト;
https://www.ibm.com/support/knowledgecenter/ja/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbcpx01/inln.htm
では以下に引用するような説明がなされています。
(quote) インライン展開とは、ある特定の関数呼び出しをその関数の実際のコードで置き換えることであり、他のすべての最適化の前に実行されます。 サンプル・プログラムCCNGOP1 は、which_group() 関数について #pragma inline ディレクティブを指定しています。 CCNGOP1 をコンパイルするときに OPTIMIZE オプションを指定すると、コンパイラーは CCNGOP1 が CCNGOP2 と同じであると判断します。
//(quote) //サンプル・プログラム CCNGOP1 /* 最適化を示す例 */ #include <stdio.h> #pragma inline (which_group) int which_group (int a) { if (a < 0) { printf("first group¥n"); return(99); } else if (a == 0) { printf("second group¥n"); return(88); } else { printf("third group¥n"); return(77); } } int main (void) { int j; j = which_group (7); return(j); }
//(quote) //サンプル・プログラム CCNGOP2 /* 最適化を示す例 */ #include <stdio.h> int main(void) { printf("third group¥n"); /* a lot less code generation */ return(77); }
ということは、ある関数をinlineするということの順序は、
Preprocessorがcompilationの前に、inlined された関数をあらかじめ演算して、結果を得ておく。
その後に、
本来は、そのinlinedされた関数がcallされた後に、そのcallの結果としてreturnすべき値を、この値を表示するべき位置(すなわちcallerの位置)に表示する。
つまり、さらに簡潔に言えば、
preprocessorがcompilationの前に、前もって関数を演算しておいて、結果を表示しておく、
ということになりますか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。