コンパイルとは

書いたコードは、そのままでは動きません

前回書いた printf の 1 行は、人間が読むために作られた文字です。コンピュータの CPU が直接実行できるのは、機械語と呼ばれる数値の列だけで、C のソースコードをそのまま読ませることはできません。そこで、ソースコードを機械語に翻訳する作業が必要になります。これが コンパイル です。

この「翻訳してから動かす」という段取りが、C 言語を学ぶ最初の壁になります。JavaScript や Python のように書いてすぐ実行できる言語と違い、C では必ず 1 手はさまります。逆に言えば、ここさえ飲み込めば、あとは文法の話に集中できます。

ソースが動くまでの 3 段階

実際に手元のパソコンで作業するとき、流れは次のようになります。

  1. ソースコードを書くmain.c のような、拡張子が .c のテキストファイルを作ります。中身はただの文字なので、この時点ではまだ何も動きません
  2. コンパイルする。コンパイラという翻訳プログラムに main.c を渡します。うまく翻訳できると、maina.out という名前の 実行ファイル ができます
  3. 実行ファイルを動かす。できあがったファイルを起動すると、はじめて画面に文字が出ます

コマンドで書くと、たとえば次のようになります。

/* gcc main.c -o main ソースを翻訳して main を作る ./main できた main を動かす */

大事なのは、2 と 3 が別の作業だということです。コンパイルが成功した時点では、まだ何も表示されていません。表示されるのは 3 の段階です。

翻訳の途中で止まるとエラーになる

コンパイラは、翻訳できない書き方を見つけると、実行ファイルを作らずに止まります。このとき出るのが コンパイルエラー です。セミコロンの付け忘れや、綴りを間違えた変数名は、ここで全部見つかります。

これは C 言語の親切な面でもあります。おかしなところがあれば動かす前に教えてくれるので、実行してから壊れていることに気づく、という事故が減ります。エラーメッセージの読み方は第 5 回でじっくり扱います。

実行ファイルは環境ごとに別物

コンパイルの結果できる実行ファイルは、翻訳したときの CPU と OS 向けの機械語です。そのため、Windows で作った実行ファイルは Mac ではそのまま動きません。持ち運ぶのはソースコードのほうで、動かす場所でコンパイルし直す、というのが C の基本的な考え方です。

この学習画面では、コードを提出するたびに裏でコンパイルと実行がまとめて走ります。エラーが出たときは、コンパイラのメッセージがそのまま表示されます。

では、この 3 段階を自分の言葉で出力してみましょう。

要件

  1. 1 ソースコードを書く の次に、2 コンパイルする を表示する
  2. その次に 3 実行ファイルを動かす を表示する
  3. 全体で3行になるようにする

入出力例

main("") → "1 ソースコードを書く 2 コンパイルする 3 実行ファイルを動かす"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.c
学習モード

メモ

コンパイルとは

⌘S で保存