前の節では、プログラムを動作させる、とあっさり言っていましたが、
ここでは、そのことについて、より詳しく説明することにします。
そもそも、皆さんが先ほど記述したプログラムは、普通の文字列に過ぎません。
あなたも、コンピュータは
2進数で動いていると聞いたことがあると思いますが、
2進数で動いているコンピュータが、なぜ文字列を認識して動くのでしょうか。
本来、コンピュータにとって、理解できるのは2進数で書かれた命令だけです。
2進数で書かれた命令・・・・、いわゆる、
マシン語(機械語)と言うやつです。
000101001101010100101010
000101010101010010110100
101010001010101101010110
000101001010101001001101
000101001010101000000101
これはデタラメに0と1を並べただけですが、イメージはこれで間違いありません。
古今東西、どんなコンピュータであれ、この形の命令しか認識できません。
コンピュータが理解できるのはマシン語(機械語)のみです。
実際、コンピュータ黎明期には、この様なプログラムが使われていたのです。
トグル式スイッチをパチンパチンとさせながら、膨大な数の0と1を入力していました。
しかし、いくらなんでもこれでは気が遠くなりそうです。
そこで、まず考えられたのは、数字の桁を縮めることです。
01 85 AD 7F 7C A4 FA 6B AD
06 F5 AB 74 7E DC 18 FA A4
01 7F A7 C5 D8 6B 4E A4 FA
これが、いわゆる
16進数と言う表現方法です。
2進数4桁分を16進数では1桁で表現できるので、短くなります。
そして、この数字1つ1つを
記号化したアセンブラも考えられました。
MOV AH,BH
ADD AX,70
JPN AF,01
この記号化によって、プログラミングはずいぶん効率的になりましたが、
まだまだ、普通の人が取り扱うにはわかりにくい記号であることに変わりありません。
これを大きく変えた、世界初のプログラミング言語が、FORTRAN(フォートラン)です。
DO 10 I=1,10000
READ *,X
IF (X,GT,MAX)MAX=X
10 CONTINUEA
ここまでくると、かなり英文や数式に近くなり、普通の人でも勉強すれば理解できます。
C言語も、これら人間の言葉に近い言語、
高級言語の1つに数えられています。
【高級言語】
人間にわかりやすく書くことができるプログラミング言語。
これに対して、マシン語やアセンブリを低級言語と呼ぶ。
高級言語は、人間が考えた言語なので、コンピュータには理解できません。
これをコンピュータに理解させるためには、翻訳が必要です。
英語を日本語に翻訳するのと基本的に同じことです。
この作業、もちろん人間が手作業で行うことも可能なのですが、
それでは、結局マシン語でプログラミングしているのと大差ありません。
その為、翻訳を行わせるためのソフトが存在しています。
翻訳方法は主に2種類ありますが、C言語の場合、全部を一気に翻訳する方法を使います。
C言語以外の言語の中には、同時翻訳を行うタイプもあります。
それらはインタプリタと呼ばれており、
柔軟な構成ができますが、速度が低速なのが欠点です。
C言語にもインタプリタ式の環境があります。
プログラムを一つ一つ確認しながら実行でき、
バグ修正には大変便利なのですが、
C言語最大の利点である速度が犠牲になるため、
実用的な目的で使用されることはありません。
この翻訳を
コンパイル、翻訳を行うソフトを
コンパイラと呼んでいます。
すでにコンパイラの入手や使い方は説明しましたが、このソフトはそのために必要なのです。
【コンパイラ】
C言語で書かれた文字列ファイルを、マシン語に翻訳するソフト。
このコンパイラは、実際には
3段階の仕組みで動作しています。
まず、始めにプリプロセッサというソフトにより、文字列の調整が行われます。
空白や改行の結合、記号の置き換えなどを行いプログラムを解析しやすくします。
また、後述する#define疑似命令などもここで処理されています。
次に、コンパイラによってコンパイルされるのですが、この時に
最適化が行われます。
同じC言語のプログラムでも、翻訳の仕方によって動作時の速度が違ってくるため、
コンパイラは、より高速になるように翻訳を行っています。
【最適化】
より高速に動作するように工夫してマシン語に翻訳する機能。
最後に、この翻訳した機械語プログラムが、リンカというソフトによって結合されます。
リンカで結合することを、リンクと呼びます。
リンクされることで、マシン語のデータが、実行可能ファイルになります。
C言語のプログラム(ソースコード)
V
プリプロセス(文字列の調整)
V
コンパイル(翻訳)
V
リンク(結合)
V
実行可能なソフトウェア(実行可能ファイル)
※プリプロセス、コンパイル、リンクをまとめてコンパイルと呼ぶことがある。
また、実行可能ファイルを作成することまでまとめてビルドと呼ぶことがある。
実行可能ファイル(要するにEXEファイル)となったファイルは、
アプリケーションとして実行できます。
これら一連の作業は、現在では完全に自動化されているので、
我々は普段はとくに意識せずとも、ボタンを押すだけで動作可能なソフトが作られます。