CodeZine(コードジン)

特集ページ一覧

while文の演習と関数

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/24 11:00

目次

5ルールの4つめ、関数

 これまでは、プログラムはすべてmain()という場所に書いてきました。数十行の小さなプログラムであればこれで問題ないですが、プログラムが大きくなってくると、以下のような問題が出てきます。

  1. ひとかたまりになっていると読みにくい、メンテナンスしにくい

    たとえば1万行が処理順に羅列されたプログラム…まず読めないと思います。

  2. 同じ、あるいは似た処理を複数箇所に記述するのは効率が悪い

    同じ仕事を複数箇所に書くのは、読みにくくなる上にメモリの無駄でもあります。

 そこでプログラムでは、ある仕事の単位をひとかたまりにして、必要なときにそれを呼び出すという方法を使います。これは一般的にはサブルーチンといいます。C言語では、このなにかしらの機能を持った処理のかたまりを、関数という名前で呼びます。C言語の関数は、以下のような形をしています。

戻り値の型 関数名(引数、引数、…) {     処理 }

引数

 引数(ひきすう)は、その関数に与える値です。戻り値は、関数で処理された結果のことです。わかりにくいと思いますので、いきなり実例でいきましょうか。たとえば、2つの変数をもらって、その和を返す関数はリスト1のようになります。

リスト1:足し算をする関数
int  tashizan( int a, int b )   ① {     int kotae ;                 ②     kotae = a + b ;             ③     return kotae;               ④ }

 まず1行目(①)から。最初のintは、変数の型で学んだのと同じです。「この関数の処理結果(計算結果)は、int型で返しますよ」という宣言です。tashizanは、この関数の名前です。名前はなんでもOKですが、その関数が何をするものかわかりやすい名前を付けるのが常道です。関数名のあとにはカッコで2つの変数宣言があります。これがこの関数への引数です。ここではint型で2つの値を受け取り、それぞれaとbという変数に代入することを意味します。

 2行目(②)は普通の変数宣言です。この関数で使うための変数を宣言します。ここでは計算結果を入れるためのkotaeという変数を作ってみました。

 3行目(③)はこの関数で行う処理です。ここでは単に足し算をしています。

 4行目(④)は初めて見る命令が出てきました。return(リターン)文です。これは、この関数の戻り値を指定する命令です。つまり、3行目で得られた計算結果(が入っている変数kotae)を返しますということです。

関数の呼び出し

 次に関数の使い方です。関数を使うことを、一般にはその関数を「呼び出す」という言い方をします。では、main()からtashizan()を呼び出す例をリスト2に示します。

リスト2:関数の呼び出し方
void main()                       ① {     int	kotae;                    ②     kotae = tashizan( 64, 18 );   ③  }

 いきなり3行目(③)を見てください。これが関数の呼び出し方です。関数tashizan()は、引数2つですので2つ値を与えます。変数kotaetashizan()の処理結果を受け取るための変数です。3行目まで実行すると、kotaeには82が代入されるはずです。ぜひPM plus→SM+で確認してみてください。

引数は変数でもOK

 ここでは引数に数値を書いていますが、引数はもちろん変数でもOKです。たとえばリスト3のようにします。

リスト3:変数を引数にして関数を呼び出す
void main() {     int  a;     int  b;     int  kotae;      a = 64;     b = 18;     kotae = tashizan( a, b ); }

 ここで注意があります。main()ではa, b, kotaeという変数を宣言しています。一方で、関数tashizan()でも同じ名前の変数があります。kotaeという変数に計算結果が入るのなら、

void main() {     int  a;     int  b;     int  kotae;      a = 64;     b = 18;     tashizan( a, b ); }

 と書くだけで、main()の中の変数kotaeに計算結果が代入されるでしょうか。これもぜひSM+で確かめてみてください。

 はい、main()の中のkotaeに値は入りませんね。同じ名前の変数でも、main()の中の変数とtashizan()の中の変数は別ものなのです。これはたとえば、ヒロシ君という子がいても、佐藤さんちのヒロシ君と鈴木さんちのヒロシ君は別人というのに似ています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:たった5つのルールではじめるC言語開発

もっと読む

著者プロフィール

  • 舘 伸幸(タチ ノブユキ)

    NECマイクロシステム株式会社 勤務 NPO法人SESSAME 所属 開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。 2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5