自作関数をインライン関数に設定してみよう その2

ソーラー「


main関数内に自作関数が使用されているときの


プログラムの実行順序がわかったかな。


先ほどのエピソードのプログラムはこちら

👇


#include <iostream>


using namespace std;


void function(int a, int b) {

cout << a + b << "\n";

return;


}


int main() {


function(1,2);


return 0;


}


ビルド実行結果


3


ソーラー「つまり


main関数を実行していて


その中で


自作関数が実行されるときは


コンピュータは


機械語に翻訳された自作関数が格納されているメモリに


読込みにいくため


main関数の実行は中断されるんだね。


さらに


main関数の実行を中断された箇所から再開するために


再開時の機械語に翻訳された命令文を格納しているメモリの


アドレスが


あるメモリに格納されることになるんだね。


となると・・・・・


次の命令文をご覧ください。



#include <iostream>


using namespace std;


void function(int a, int b) {

cout << a + b << "\n";

return;


}


int main() {


int c=3;

cout << c << "\n";


function(1,2);


int d=4;

cout << d << "\n";


function(1,2);


int e=5;

cout << e << "\n";


function(1,2);


int f=6;

cout << f << "\n";


function(1,2);


int g=7;

cout << g << "\n";


function(1,2);


return 0;


}


ビルド実行結果


3

3

4

3

5

3

6

3

7

3


ソーラー「このプログラムでは


自作関数function(1,2);が実行されるたびに


main関数は実行を中断します


そして


中断された箇所からプログラムが実行されるように


次に再開される機械語に翻訳された命令文が


格納されているメモリのアドレスが


あるメモリに保存されています。


このようにコンピュータが


自作関数の命令文にたどり着くたびに


自作関数の定義を読み込みに行くと


プログラムの実行に時間がかかります。


そこで


登場するのが


自作関数をインライン関数にするというものなのです。


自作関数をインライン関数にするには


自作関数の定義の戻り値の型の前にinlineを設定します。



今のプログラムの場合


自作関数functionをインライン関数にしたいなら


自作関数functionの定義を

👇

inline void function(int a, int b) {

cout << a + b << "\n";

return;

}



記述します。」


マックス「それだけか かんたんだな。


なんか inlineがつくとかっこいいじゃないか」


てんC「そうですね。」


ソーラー「では


自作関数functionの定義を


void function(int a, int b) {

cout << a + b << "\n";

return;

}


から


自作関数functionの定義を


inline void function(int a, int b) {

cout << a + b << "\n";

return;

}


切り替えた場合の


プログラムを実行してみます。


#include <iostream>


using namespace std;


inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数をinline関数に設定しました

}


int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;


ビルド実行結果


3

3

4

3

5

3

6

3

7

3



ソーラー「このプログラムの実行結果は


自作関数をinline関数に設定しない場合と


まったく同じです。


ですが


違いがあるん~だよ~」




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る