関数の利用

これまでに対象としてきた, 小さなプログラム(百行程度まで)であれば, main 関数一つですべての処理をやることも不可能ではない. しかし, プログラムが巨大になるにつれて, 小さなまとまりに分けて 設計, 作成していく必要が高まる.

そうした分解の単位として, C 言語では関数が使われる. 処理のひとまとまりを関数とし, ブラックボックスとして中の処理の実情を隠して, 呼び出すだけで使えるようにするのである. (関数一つは100行以内におさめるようにすべきであろう)

その意味では, たとえ一度しか呼び出されない関数であっても, 「処理のまとまりに名前をつける」という効能があるわけで, 関数を使う意味がある.

その際, 関数の外界とのやりとりが引数と返り値だけに限られるという 特徴がいきてくる. 関数を呼び出すことによって, おもわぬ変数が変化してしまう, といった 事態が避けられるわけだ. ただし, 大域変数(グローバル変数, 関数の外で宣言した変数)は 関数の中からも参照や変更が可能であるから, 上述の「おもわぬ変化」を起こすこともある. したがって, 大域変数は注意して使う必要がある.

たとえば, 整数配列の合計を求める次の関数は, 最初の呼び出しでは正常に動作するが, 二度め以降は誤った結果を返すことになる. (ヒント: 大域変数の初期値は 0 になる)

int sum;

int array_sum(int *a, int size)
{
  int i;
  for(i=0; i<size; i++){
    sum += a[i];
  }
  return sum;
}

prev index next