サンプルプログラム sample1.h, sample1.c, sample1a.c
(17)分割コンパイル
プログラムの規模が大きくなってきますとソースファイルをいくつかに(適当に)分割してコンパイルすることができます。
まず、分割したくなるのは構造体や共用体などの(ソースファイルに対して)共通の定義ファイル(ヘッダーファイル 拡張子.h)とプログラム(拡張子.c)ファイルです。
ヘッダーファイル(.h)およびプログラムファイル(.c)は2つ以上に分割可能です。
サンプルプログラム中に#include <stdio.h>という行があったと思いますが、これはヘッダーファイルを読み込ませるため指示です。
Cコンパイラのプリプロセッサはinclude文を見つけるとそこに指定したファイル(この場合 stdio.h)というファイルを読み込みます。
同様に自分で作成したヘッダーファイルを読み込ませるためには#include "sample.h"という風にダブルコーテーション(")で括って記述します。
sample1.h
#include <stdio.h>sample1.c
#include "sample1.h"
extern int add( int, int );
int global_val;
void main( void )
{
int z;
z = add( 1, 2 );
printf( "z = %d, global_val = %d\n", z, global_val );
}
sample1a.c
extern int global_val;
int add( int x, int y )
{
int z;
z = x + y;
global_val = z * 2;
return( z );
}
このソースファイルをコンパイルするには、
gcc sample1.c sample1a.c -o sample1.exe
のようにコマンドを実行しますとsample1.exeファイルが出来上がります。
プログラムの実行結果は以下のようになります。
z = 3, global_val = 6
externは外部参照であることを指示しています。つまり、実態はそのファイルに無く別のファイルにあることを指示しています。
externは関数または変数の両方に対して有効です。