関数

ここで命令と関数の違いを説明しましょう。
かつてC言語開発の初期では命令が組み込まれていました。
簡単に言うと命令とはコンパイラに組み込まれた命令です。
中身は関数です。
言い換えるとコンパイラにあらかじめ組み込まれた関数です。
ではコンパイラに組み込まれていない関数があるのでしょうか。
それがポイントです。

今後、命令という単語は使わずに関数という単語で統一することにします。
命令の中身も実は関数だ、ということがわかったからです。

関数というのはコンパイラの外に存在して、リンクの時に組み込むことができるのです。
ウィンドウズの開発にはVC++(これはC++をウィンドウズの開発環境に特化したものと言えます)を使いますが、プレイステーションのゲームを開発するのもやはりC言語です。
プレイステーション2の開発言語はC++だという話です。

ウィンドウズでもプレイステーションでも使えるのはなぜか?
ウィンドウズ特有の命令はプレイステーションでは使えないし、プレイステーション特有の命令はウィンドウズでは使えません。

実はそれぞれの特有の関数は、ライブラリという形でコンパイラの外に存在します。
それぞれのライブラリをリンクすることによってウィンドウズでもUNIXでもプレイステーションでも同じC言語でプログラムの開発をすることができるのです。
しかし現在では、同じCコンパイラが使えると言うわけではなく、それぞれウィンドウズ用、UNIX用プレイステーション用のコンパイラを使わなければなりませんが。

ここで一つ大きな疑問が浮かんできます。
ウィンドウの中のボタンを動かすのはともかく、その発想はどこからくるのか?
動かそうと考えたとして、どうやってそれをコーディングする方法を見つけるのか、という疑問です。
これはつまりどうやったらウィンドウズのプログラムをマスターすることができるのか。
あるいはどうやったらウィンドウズでできることがわかるのか、と言い換えることができます。

誰かから教えられているうちはいいけれど、すべて教えてもらう時間はありません。
いずれ自分でやりたいことを調べて必要なコーディングをしなければなりません。
また、そうできるようにならなければプログラムをマスターしたとは言えないわけです。

残念ながらその答えは簡単ではありません。
でもいまその入り口を教えておきます。
VC++のマニュアルや参考書には「とても重要である」と書いてあるクラス階層図というものがあります。
始めて見ると何が重要なのか良く分かりませんが、これはそれぞれのクラスがなにを継承してできているかという事をあらわしています。
という説明でもやはりわかりませんね。
つまり、ボタンならボタンのクラスは何ができるか。という事がこれを見ると分かるのです。
たとえばウィンドウクラスは位置とサイズの変更ができる、という知識があると、ウィンドウを継承してできたクラスは、やはり位置とサイズの変更ができる、ということがわかります。

階層図があればそれを下から順番に学んでいけばウィンドウズの全体図がおぼろげながら見えてくるのです。
これが入り口です。
もっともCの文法もまだやっていないのでこの入り口から中に入るのはもうちょっと先になります。