MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
しんで覚えるC言語
しんで覚えるC言語

コンパイラは翻訳ソフト

すべては機械語
前の節では、プログラムを動作させる、とあっさり言っていましたが、
ここでは、そのことについて、より詳しく説明することにします。

そもそも、皆さんが先ほど記述したプログラムは、普通の文字列に過ぎません。
あなたも、コンピュータは2進数で動いていると聞いたことがあると思いますが、
2進数で動いているコンピュータが、なぜ文字列を認識して動くのでしょうか。

本来、コンピュータにとって、理解できるのは2進数で書かれた命令だけです。
2進数で書かれた命令・・・・、いわゆる、マシン語(機械語)と言うやつです。

機械語のイメージ
000101001101010100101010
000101010101010010110100
101010001010101101010110
000101001010101001001101
000101001010101000000101

これはデタラメに0と1を並べただけですが、イメージはこれで間違いありません。
古今東西、どんなコンピュータであれ、この形の命令しか認識できません。
プログラミング言語の登場
コンピュータが理解できるのはマシン語(機械語)のみです。
実際、コンピュータ黎明期には、この様なプログラムが使われていたのです。
トグル式スイッチをパチンパチンとさせながら、膨大な数の0と1を入力していました。

しかし、いくらなんでもこれでは気が遠くなりそうです。
そこで、まず考えられたのは、数字の桁を縮めることです。

16進数の機械語
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(フォートラン)です。

FORTRAN
DO 10 I=1,10000
READ *,X
IF (X,GT,MAX)MAX=X
10 CONTINUEA

ここまでくると、かなり英文や数式に近くなり、普通の人でも勉強すれば理解できます。
C言語も、これら人間の言葉に近い言語、高級言語の1つに数えられています。

キーワード
【高級言語】

人間にわかりやすく書くことができるプログラミング言語。
これに対して、マシン語やアセンブリを低級言語と呼ぶ。


C言語翻訳ソフト
高級言語は、人間が考えた言語なので、コンピュータには理解できません。
これをコンピュータに理解させるためには、翻訳が必要です。
英語を日本語に翻訳するのと基本的に同じことです。

この作業、もちろん人間が手作業で行うことも可能なのですが、
それでは、結局マシン語でプログラミングしているのと大差ありません。
その為、翻訳を行わせるためのソフトが存在しています。

翻訳方法は主に2種類ありますが、C言語の場合、全部を一気に翻訳する方法を使います。

同時翻訳

C言語以外の言語の中には、同時翻訳を行うタイプもあります。
それらはインタプリタと呼ばれており、
柔軟な構成ができますが、速度が低速なのが欠点です。


C言語インタプリタ
C言語にもインタプリタ式の環境があります。
プログラムを一つ一つ確認しながら実行でき、
バグ修正には大変便利なのですが、
C言語最大の利点である速度が犠牲になるため、
実用的な目的で使用されることはありません。

この翻訳をコンパイル、翻訳を行うソフトをコンパイラと呼んでいます。
すでにコンパイラの入手や使い方は説明しましたが、このソフトはそのために必要なのです。

キーワード
【コンパイラ】

C言語で書かれた文字列ファイルを、マシン語に翻訳するソフト。


このコンパイラは、実際には3段階の仕組みで動作しています。

まず、始めにプリプロセッサというソフトにより、文字列の調整が行われます。
空白や改行の結合、記号の置き換えなどを行いプログラムを解析しやすくします。
また、後述する#define疑似命令などもここで処理されています。

次に、コンパイラによってコンパイルされるのですが、この時に最適化が行われます。
同じC言語のプログラムでも、翻訳の仕方によって動作時の速度が違ってくるため、
コンパイラは、より高速になるように翻訳を行っています。

キーワード
【最適化】

より高速に動作するように工夫してマシン語に翻訳する機能。


最後に、この翻訳した機械語プログラムが、リンカというソフトによって結合されます。
リンカで結合することを、リンクと呼びます。
リンクされることで、マシン語のデータが、実行可能ファイルになります。

コンパイルの流れ
C言語のプログラム(ソースコード)

プリプロセス(文字列の調整)

コンパイル(翻訳)

リンク(結合)

実行可能なソフトウェア(実行可能ファイル)

※プリプロセス、コンパイル、リンクをまとめてコンパイルと呼ぶことがある。
また、実行可能ファイルを作成することまでまとめてビルドと呼ぶことがある。

実行可能ファイル(要するにEXEファイル)となったファイルは、
アプリケーションとして実行できます。

これら一連の作業は、現在では完全に自動化されているので、
我々は普段はとくに意識せずとも、ボタンを押すだけで動作可能なソフトが作られます。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く