第8回では,以下の項目に関して学ぶ.

  1. 分割コンパイル
  2. バブルソート
  3. 選択ソート
  4. 挿入ソート

課題のソースコードのテンプレート:

課題1: 分割コンパイル

規模の大きなプログラムを作成しようとする場合,関数を単位としてソースコードを分割し,複数のファイルに分けてコンパイルすることができる.これを分割コンパイルと呼ぶ.

たとえば,prog7-1.c をコンパイルして,実行ファイル prog7-1 を生成するためには,以下のようにコンパイルした.

% gcc prog7-1.c -o prog7-1

これに対して,分割コンパイルでは,ソースファイルごとにコンパイルを行い,オブジェクトファイルを生成する.その後,必要なすべてのオブジェクトファイルをリンクして実行ファイルを生成する.分割コンパイルの例を以下に示す.

% gcc -c sort-check.c
% gcc prog8-1.c sort-check.o -o prog8-1
まず,ソースファイル sort-check.c をコンパイルすることで,オブジェクトファイル sort-check.o を生成する.その後,ソースファイル prog8-1.c をコンパイルし,生成しておいたオブジェクトファイルとリンクすることで,実行ファイル prog8-1 を生成する.

分割コンパイルを行う際には,関数プロトタイプによる宣言が必要であることに注意しなければならない.たとえば,ヘッダファイル sort-common.h には,以下のように関数プロトタイプの宣言が記述されている.

extern void print(struct data data[], int num);
extern int is_sorted(struct data data[], int num);
extern は,それが付与された関数や変数が外部オブジェクトファイルに宣言されていることを表している.

さらに,ヘッダファイル sort-common.h を見ると,以下のように構造体が定義されていることがわかる.

struct data {
    int key;
    char value;
};

sort-common.h を利用するためには,以下のようにインクルードする(取り込む).

#include "sort-common.h"


prog8-1.c を実際に分割コンパイルして,prog8-1 を生成せよ.さらに,実行結果を確認せよ.
Makefile を用意しておいたので,それを利用するとコンパイルが楽になる.
Go to Top