コンパイルとは
書いたコードは、そのままでは動きません
前回書いた printf の 1 行は、人間が読むために作られた文字です。コンピュータの CPU が直接実行できるのは、機械語と呼ばれる数値の列だけで、C のソースコードをそのまま読ませることはできません。そこで、ソースコードを機械語に翻訳する作業が必要になります。これが コンパイル です。
この「翻訳してから動かす」という段取りが、C 言語を学ぶ最初の壁になります。JavaScript や Python のように書いてすぐ実行できる言語と違い、C では必ず 1 手はさまります。逆に言えば、ここさえ飲み込めば、あとは文法の話に集中できます。
ソースが動くまでの 3 段階
実際に手元のパソコンで作業するとき、流れは次のようになります。
- ソースコードを書く。
main.cのような、拡張子が.cのテキストファイルを作ります。中身はただの文字なので、この時点ではまだ何も動きません - コンパイルする。コンパイラという翻訳プログラムに
main.cを渡します。うまく翻訳できると、mainやa.outという名前の 実行ファイル ができます - 実行ファイルを動かす。できあがったファイルを起動すると、はじめて画面に文字が出ます
コマンドで書くと、たとえば次のようになります。
/*
gcc main.c -o main ソースを翻訳して main を作る
./main できた main を動かす
*/大事なのは、2 と 3 が別の作業だということです。コンパイルが成功した時点では、まだ何も表示されていません。表示されるのは 3 の段階です。
翻訳の途中で止まるとエラーになる
コンパイラは、翻訳できない書き方を見つけると、実行ファイルを作らずに止まります。このとき出るのが コンパイルエラー です。セミコロンの付け忘れや、綴りを間違えた変数名は、ここで全部見つかります。
これは C 言語の親切な面でもあります。おかしなところがあれば動かす前に教えてくれるので、実行してから壊れていることに気づく、という事故が減ります。エラーメッセージの読み方は第 5 回でじっくり扱います。
実行ファイルは環境ごとに別物
コンパイルの結果できる実行ファイルは、翻訳したときの CPU と OS 向けの機械語です。そのため、Windows で作った実行ファイルは Mac ではそのまま動きません。持ち運ぶのはソースコードのほうで、動かす場所でコンパイルし直す、というのが C の基本的な考え方です。
この学習画面では、コードを提出するたびに裏でコンパイルと実行がまとめて走ります。エラーが出たときは、コンパイラのメッセージがそのまま表示されます。
では、この 3 段階を自分の言葉で出力してみましょう。
要件
- 1 ソースコードを書く の次に、2 コンパイルする を表示する
- その次に 3 実行ファイルを動かす を表示する
- 全体で3行になるようにする
入出力例
main("") → "1 ソースコードを書く
2 コンパイルする
3 実行ファイルを動かす"