第 1章コンパイル

目次
はじめは Hello World!!から
課題作成へ向けて
課題:九九の表を作ってみよう!!
今週のちょっといいもの

はじめは Hello World!!から

エディタでソースファイルを作成する

まず始めにエディタでソースファイルを作成します. ここで作成する課題は,いつもの定番 Hello World!!です. このプログラムは画面に Hello World!!を表示するだけのプログラムです. プログラムを以下に示します.

図 1-1. 最初のプログラム:HelloWorld.c

#include <stdio.h>
int main() {
  printf("Hello World!!¥n");
}

これを入力して好きな名前で保存してください. 以下の例では,このファイル名を HelloWorld.cとします.

コンパイルする

コンパイルにはccと言うコマンドを使います. これは,GNU [1] によって作成されているCコンパイラでgccとよばれるものです. これまでのVisual C++だと,ボタンをクリック/メニューを選択するだけで, コンパイルからリンクまでを行ってくれたと思います.

実際のCのコンパイルはプリプロセスと2つのステージで実行されることが 仕様で決まっています. プリプロセスでは, #defineで定義したマクロを置き換えることなどが 行われます. 次の作業はアセンブラへの変換です. その後アセンブラがオブジェクトファイルへと翻訳されます.

オブジェクトファイルではまだ,ライブラリなどに入っている関数などへの 参照が解決されていないので,これを解決するためにリンクが行われます.

ここまでの作業を図で表すと図1-2のようになります.

ソースファイル
→ プリプロセス 
→ コンパイルステージ1(アセンブラへ変換)
→ コンパイルステージ2(オブジェクトファイルへ変換) 
→ リンク 
→ 実行可能形式(executable)
      

図 1-2. プログラム作成の流れ

指定をしなかった場合,コンパイラは一気に実行可能形式を作成します. コマンドラインオプションの指定で,適当な段階でコンパイルを止めることも 可能です. これは,後の方で分割コンパイルを行う必要が出てきた時に詳しく説明します.

では,実際にコンパイルしてみましょう.

      herb{?} ls
      HelloWorld.c
      herb{?} cc HelloWorld.c
      herb{?} ls
      HelloWorld.c a.out
    

このように,a.outというファイルが作成されます. このファイルが実行形式です. 実行してみましょう.

      herb{?} ./a.out
      Hello World!!
    

うまく動きましたか? コマンド指定の頭に付いている ./は カレントディレクトリのという意味でした. システムのコマンドに同じ名前のコマンドがあるかもしれないので, このように指定しておいたほうが安全です.

いつもa.outという名前では嫌だと思いませんか? コマンドラインオプションの -oを使えば自分の好きな名前で 実行可能形式を作成できます.

      herb{?} cc -o HelloWorld HelloWorld.c
      herb{?} ls
      HelloWorld      HelloWorld.c    a.out
      herb{?} ./HelloWorld
      Hello World!!
    

これは,忠告ですがテスト用のプログラムだからと言って実行可能形式の ファイル名を testとしてしまうと testコマンドがあるのではまります. 別の名前にしましょう.

2001年5月30日の授業内容補足

前回の授業では,日付を与えて曜日を表示するプログラムの 入力とコンパイルをしてもらいました. コンパイル手順などはここまでの説明などと同じなので省略します.

授業で入力してもらったプログラムは day.cで, そのコンパイル手順は

	herb{?} cc -o day day.c
      
でした.

当日行った作業も参照してください.

注意

[1]

GNU公式サイト (日本語訳)参照.