C言語学習ポータル(無料版) 学習コンテンツ プログラムとは何か ソースコードから機械語へ——コンパイルの旅

📜 プログラムとは何か

ソースコードから機械語へ——コンパイルの旅

無料公開版に収録・読む目安 12分

🎯 ソースコード・コンパイラ・機械語の関係と、コンパイルという工程の役割を説明できる

私たちが書くプログラムは、英単語と記号でできた文章です。ところが機械が理解できるのは0と1の並びだけ。この2つの間には、翻訳者が必要です。

人間が読み書きするために文字で書かれたプログラムをソースコードと呼びます。例えばC言語ではこう書きます。

#include <stdio.h>

int main(void) {
    printf("こんにちは\n");
    return 0;
}

これを実行するには、CPUが直接読める形——機械語に翻訳しなければなりません。機械語は 10110000 01100001 のような数値の列で、人間が読むようには作られていません。この翻訳をしてくれる道具がコンパイラ、翻訳という作業そのものがコンパイルです。

翻訳は1回、実行は何度でも

コンパイルすると、機械語が詰まった「実行ファイル」ができあがります。以後はそのファイルを起動するだけで、翻訳をやり直す必要はありません。だからC言語のプログラムは動作が速く、ソースコードを渡さずに配布できます。

世の中には別のやり方もあります。Pythonなどは、実行のたびに1行ずつその場で翻訳しながら進みます(同時通訳型)。手軽ですが、毎回通訳の手間がかかる分だけ遅くなります。C言語は「先に全部訳しておく」方式だ、と覚えてください。

ビット翻訳ずみの台本を読むか、通訳さんを連れて歩くか。Cは前者だよ。

もう一つ、翻訳ならではの制約があります。翻訳先は機械の種類ごとに違うという点です。WindowsのパソコンとスマートフォンではCPUの言葉が違うので、同じソースコードから作った実行ファイルでも、そのままでは動きません。動かしたい相手ごとに翻訳し直す必要があります。逆に言えば、ソースコードさえあればどの機械向けにも作り直せるということでもあります。Cのプログラムが半世紀にわたって生き延びてきた理由の一つが、ここにあります。

旅は4つの駅を通る

コンパイルは、実は4つの工程をまとめた呼び名です。名前だけ先に見ておきましょう。

  1. 前処理 — #include などの下ごしらえをする
  2. コンパイル(狭い意味) — アセンブリという機械語に近い言葉へ訳す
  3. アセンブル — アセンブリを機械語(0と1)に変換する
  4. リンク — printf などの部品と結合して、実行ファイルを完成させる

今すぐ覚える必要はありません。第3部で自分の手で確認します。ここでは「1つのボタンに見えて、中では4人がバケツリレーをしている」というイメージだけ持っておけば十分です。

エラーは翻訳者からの質問状

書き方が間違っていると、コンパイラは翻訳をやめてエラーメッセージを出します。初心者はここでへこみますが、見方を変えてください。実行する前に間違いを見つけてもらえたということです。動かしてから壊れるより、はるかに親切な世界です。エラーの読み方は第3トラックで扱います。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

ソースコードそーすこーど

人間が読み書きできる形でプログラムを書いた文章そのもの。この段階ではコンピュータはまだ直接実行できず、機械語への変換が必要になる。この文章を人間が理解しやすい形のまま保存したファイルがソースファイルと呼ばれる。

機械語きかいご

0と1の並びだけで書かれた、CPUが直接理解できる命令の集まり。人間には読みにくいが、コンピュータが実行できる唯一の言葉にあたる。同じソースコードでも、CPUの種類が変われば生成される機械語も変わってくる。

コンパイラこんぱいら

ソースコードを機械語に変換するソフトウェア。文法チェックも同時に行い、間違いがあればコンパイルエラーとして知らせてくれる翻訳者兼校正者にあたる。gccやclangなど、C言語向けのコンパイラにはいくつかの種類がある。

コンパイルこんぱいる

ソースコードをコンピュータが直接実行できる機械語に変換する作業。翻訳者が人間の言葉を機械の言葉に訳してくれる工程だとイメージすると分かりやすい。この工程を経なければ、書いたコードはコンピュータの上でまったく動かせない。

CPUしーぴーゆー

コンピュータの頭脳にあたる部品。メモリから命令とデータを取り出し、計算や判断を行って結果をまた書き戻す仕事を、目にも止まらぬ速さで繰り返している。現代のCPUは1秒間に数十億回もこのサイクルを繰り返している。

エラーメッセージえらーめっせーじ

プログラムの何が・どこで間違っているかを、コンパイラや実行環境が知らせてくれる文章のこと。読めば直し方のヒントが詰まっている味方。英語で書かれていることが多いが、落ち着いて読めば重要な情報が含まれている。

同じトラックのほかの項目

コンピュータは何をする機械かコンピュータが「超高速だが命令どおりにしか動かない機械」であることを、自分の言葉で説明できる プログラムとは「手順書」であるプログラムが満たすべき3条件(順序・明確さ・有限)を理解し、曖昧な指示との違いを説明できる CPUとメモリの模式図CPUとメモリの役割分担を机の比喩で説明でき、メモリが「番地つきのロッカー」であることを理解する 命令実行サイクル(Fetch-Decode-Execute)CPUが命令を1つずつ取り出して実行する繰り返しで動いていることを理解する プログラミング言語の地図とCの位置低級言語・高級言語の違いを理解し、数ある言語の中でのC言語の位置づけを説明できる なぜ最初にC言語なのかAI時代にC言語を最初に学ぶ意味を、自分なりの理由として持てるようになる 0と1ですべてを表す——2進数の入口2進数の仕組みを理解し、簡単な2進数と10進数の相互変換ができる
‹ プログラムとは「手順書」である CPUとメモリの模式図 ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH