そうした分解の単位として, 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; }