Cコンパイラ(例えば GNU gcc)は、指定されたソースファイルに対し、文法的な問題がなく、かつ、必要な関数が揃っている条件の下、最初にソースファイルをコンパイルし、オブジェクトファイルを生成します。次にそれらのオブジェクトを結び付け(リンクし)て、ロードモジュール(例えば a.out)を生成します。
以下、サンプルプログラム maxline(標準入力のうち、最大長さを持った行番号と内容を表示する toy program)を例に挙げ、分割コンパイルのためのソースファイル分割とビルドの方法について説明していきます。このプログラムは、ヘッダファイル maxline.h、ソースファイル main.c, sgetline.c, scopy.c に分割されています(以下、Cコンパイラは GNU gcc を用います) 。
<ヘッダファイル maxline.h>
#define MAX 10000 int sgetline(char s[ ]); void scopy(char dist[ ], char source[ ]);
<ソースファイル main.c>
#include <stdio.h> #include "maxline.h" int main(void) { int len, max; char line[MAX], longest[MAX]; max = 0; while ((len = sgetline(line)) > 0) { if (len > max) { max = len; scopy(longest, line); } } if (max > 0) { printf("%d: %s", max, longest); } return 0; }
<ソースファイル sgetline.c>
#include <stdio.h> #include "maxline.h" int sgetline(char s[ ]) { int c, i; for (i=0; i<MAX-1 && (c=getchar())!=EOF && c!='\n'; ++i) { s[i] = c; } if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; }
<ソースファイル scopy.c>
void scopy(char dist[ ], char source[ ]) { int i; i = 0; while ((dist[i] = source[i]) != '\0') { ++i; } }