関数その2


・おまじないの正体1

 関数を覚えたところで改めていつも書いていたおまじない部分を見てましょう。

int main(void)
おや、どこかでみたような書式ですね。 そうです、これも関数だったというわけです。 main関数というのは特殊な関数でこの名前の関数はプログラムが実行されると一番最初に呼び出されることになっています。 前章で関数というと特殊なところへ処理がとぶようなイメージをもった方もいるかもしれませんが、最初から最後まで関数の中だったんですね。 Cは関数の集まりです。 ちなみにmainの引数がvoidになってますがここをいじると実行時のオプション等が受け取れたりします。 返り値は気にしなくてよいでしょう。

・おまじないの正体2

 知らず知らずのうちにつくっていた関数ですが、知らず知らずのうちに利用していた関数もあります。 sqrtとかはかなり分かりやすい例ですね。 いかにも関数(数学的なですが)。 実はこれだけでなくprintfとかscanfとかrandとかも全部関数だったのです(printfとかは引数の形式が特殊で分かりにくいですが)。 前章で関数はプログラムの一部という性質を持つと書きましたが、こうなってくるともっと広い意味で解釈した方がよさそうです。 関数、「function」には機能という訳もありますがこの場合こっちがしっくりくるでしょう。

 ここで、当然浮かぶ疑問としてprintfとかの宣言はどこにあるんだというのがあると思います。 例によっておまじない部分を見直してみましょう。

#include <stdio.h>
includeは他のファイル(主にヘッダファイル(拡張子がh))を読み込む命令です。 つまりstdio.hというファイルの中身がそこに書かれているのと一緒です。 stdio.hというのはCに元から用意されているもので入出力に関する関数の宣言が書かれています。 まとめるとものすごーく基本的な関数まで自分でつくってたら手間がかかったしょうがないので(ていうか難しくてつくれないので)元々用意されている関数を使わせてもらう手続きとして最初の行を書いていたとそういうわけです。 ヘッダファイルはたくさん用意されており種類によって分けられています。 だからrandを使うときはstdlib.hも、sqrtの時はmath.hをといったように使う関数によってincludeの行が増えることがあったのです。

・用意された関数の利用

 制御構文などのようなものと違い用意された関数のひとつひとつは人から習うようなものではありません。 量が膨大すぎますし使い方だけなら用意されているヘルプを見れば簡単に分かるからです。 プログラム作成中なんらかの機能を持った関数が必要になった時に、ヘルプを辞書的に使って探してみるとよいでしょう。 関数はとにかくたくさん様々な機能を持ったものがあります。 その上、人がつくった関数だって使えるので(前章のように自分でつくれるのだから当然)大抵は自分の望む機能を持つ関数が見つかるでしょう。

 なお、そのような関数の中には機種に依存するものも数多くあります。 特に入出力に関するものはそういうものが多く環境によって使える関数が違います。 (printfとかは標準関数なので心配いりません。) 例えばゲームをつくろうと思ったら押されているキーを取得したりグラフィックを使ったりしますがその辺は各自自分の環境で使えるものを調べてください。

・初心者脱出

 というわけで、関数を覚えればプログラミングの幅は一気に広がります。 特に自分で必要な関数をつくったり探してこれるようになれば今までの基本的な知識だけでも大体のものはつくれます。 あとはとにかく慣れです。 つくってみたいと思うプログラムを片っ端から組んでいれば自ずとうまい個々の処理の組み合わせ方が見えてきます。 時にはどうしてもつくりかたが分からないこともあるでしょう。 そんなことを繰り返しているうちに気づけばあなたも立派なプログラマーです。