next up previous contents
Next: 11.1 関数の書式 Up: C 言語 Previous: 10.8 課題10

11. 関数 I -- 第11回 '99.10.13

今まで我々は全ての処理を main{ と } で囲まれるメイン関数の中に書いて 来た。しかし、もし全ての処理をここに書かねばならないとしたら、非常に長いプログ ラムなどではたちまち解読不能に陥ってしまう。また、今まで様々なプログラムを書 いて来たが、その中には共通する部分が非常に多かった事に気づくであろう。こうした 共通部分は将来ともに何度も使うであろうから、ただコピーして使うだけではなく、 部品として簡単に使えるような仕組みがあればありがたい。実は、こうした事は、工業 的には我々の身の回りに既に実現されている。例えば、ネジはもっとも単純なもので ある。機械によって、使われるネジが全部違っていたりしたら考えるだにおぞましい。 また、我々の使っているコンピュータに使われている中央演算装置(cpu)もまた 安価なものは、様々な場所で使われていて、自動車や各種制御機器、最近では 洗濯機、掃除機などにも使われている。こうしたものは、部品として共通に 使われる事によって、大量生産、経済性、再利用性などの特徴を持っている。 コンピュータ言語の歴史を振り返ると、もっとも初期にあっては家内性手工業とも 言うべき一つ一つ手作りの段階であった(再利用もほとんど考慮されてなかった)、 その後70年代に入り、コンピュータの普及とともに再利用性が問題になり、 構造化プログラミングという新しい考え方が導入された。この構造化プログラミング については第1章で簡単に説明したが、ここで問題にしているのは、広義の意味での 構造化である。例えば、BASIC を例にとると、変数などはプログラム全体を通じて 同じ名前のものは許されない。従って、以前作ったものを再利用する際にも、同じ 名前の変数がないかどうか常に気にしてプログラムをする必要がある。これでは、 気軽に以前のプログラムを再利用することが出来ない。やはり、既に作った部品は 中身を知らなくても、使えるようになっていないと困る。掃除機や洗濯機を使うのに 中身の仕組みを全て知らないと使えないのでは、実用的とは言いがたいのとまったく 同じである。こうした事を広義の意味での構造化と呼び、我々が学んでいる C 言語 にもその仕組みが備わっている

 

実は、既に我々は、この C 言語の機能を使用している。例えば、printf() は 関数という部品で、我々はどうやってディスプレイに表示するのか詳細は知らないの だが、ある決まりに従って printf() に指示してやれば希望の結果が得られる ことをこれまで学んできた。また、printf() も C 言語で書かれているのだが、 我々はそこに使われている変数名などは何も知らなくても困ったことは起こらない。 このように既にあるプログラムの部品、または自分で作ったプログラムの部品を 利用する為に用意されているものを、関数と言う。C 言語で言う関数は、数学で言う 関数とは違っていて、ある情報を与えると、中で何か仕事をして、結果を返す(勿論 結果が無くても良い)もので、いわばブラックボックスである。勿論、自分で関数 を作ることも(この場合、自分で作っているのだからブラックボックスではないが)、 他人が作った関数を利用することも出来る。特に、これまで習った printf()scanf() は、標準的に用意されている関数で、この意味で標準関数という。 標準関数は、別に意識しなくても、リンクの際に自動的にコンパイラがプログラムに くっつけてくれる(但し、#include <stdio.h> のような呪文が必要だが)。



 

Noriyo Kanayama