
【6日でできるC言語入門】ソースコード分割の仕組み
C言語でプログラムを開発していくと、1つのファイルでは管理しきれないほどコードが大きくなります。そんなとき、ソースコードを複数のファイルに分割して管理することで、プログラムの構造を整理しやすくなり、複数人での開発もスムーズになります。
ソースコード分割のカギとなるのが、「ヘッダファイル(.h)」と「ソースファイル(.c)」、そして2重インクルードの防止(インクルードガード)です。
ここでは、ソースコード分割の仕組みと、ヘッダファイルの正しい作り方について解説します。

1.ヘッダファイルの仕組みと2重インクルード防止
1.1. ヘッダファイルの書式と役割
C言語のヘッダファイル(拡張子.h)は、主に次の役割を持っています。
| 役割 | 説明 |
|---|---|
| 関数プロトタイプ宣言 | 複数のファイルで同じ関数を使うための宣言をまとめる。 |
| マクロ・定数・型情報の共有 | #define や struct などの型情報を共有する。 |
| インクルードガードで多重定義防止 | 2重インクルードによるコンパイルエラーを防ぐ。 |
基本的なヘッダファイルの書式は以下のとおりです。
#ifndef _MULTIPLY_H_
#define _MULTIPLY_H_
// 関数プロトタイプ宣言
int multiply(int, int);
#endif // _MULTIPLY_H_【解説】
#ifndef と #define のペア(インクルードガード)で囲むことで、このファイルが複数回読み込まれても1度だけ展開されるようになります。
1.2. 2重インクルード防止の動作原理
インクルードガードの仕組みは次のようになっています。
| #include回数 | インクルードガードの状態 | 処理の流れ |
|---|---|---|
| 1回目 | 未定義(#ifndefの条件成立) | ファイルの内容が読み込まれ、#defineが実行される。 |
| 2回目以降 | すでに定義済(#ifndefの条件不成立) | ファイルの内容は読み込まれない。 |
これによって、プロトタイプ宣言やマクロなどの多重定義によるエラーを防止できます。
サンプル:multiply.hのインクルードガード
#ifndef _MULTIPLY_H_
#define _MULTIPLY_H_
int multiply(int, int);
#endif // _MULTIPLY_H_2.ヘッダファイルとソースファイルの連携
2.1. ファイル構成と役割
| ファイル名 | 役割 |
|---|---|
| multiply.h | 関数プロトタイプ宣言・インクルードガード |
| multiply.c | multiply関数の本体実装 |
| main.c | multiply.hの利用、プログラムの本体 |
ファイルの関連イメージ
multiply.h ──┬──→ multiply.c(関数の定義)
└──→ main.c (関数の利用)2.2. #includeの使い分け
- 自作のヘッダファイルは
#include "multiply.h"のようにダブルクォーテーションで囲んで記述します。 - 標準ライブラリのヘッダファイルは
#include <stdio.h>のように山カッコ(<>)で囲みます。
サンプル:main.c
#include <stdio.h>
#include "multiply.h"
int main(void) {
int a = 5, b = 8;
int result = multiply(a, b);
printf("結果: %d\n", result);
return 0;
}3.サンプルプログラムと実行結果
3.1. multiply.h
プロジェクト/ファイル名: Lesson44_1/multiply.h
#ifndef _MULTIPLY_H_
#define _MULTIPLY_H_
int multiply(int, int);
#endif // _MULTIPLY_H_3.2. multiply.c
プロジェクト/ファイル名: Lesson44_1/multiply.c
#include "multiply.h"
int multiply(int x, int y) {
return x * y;
}3.3. main.c
プロジェクト/ファイル名: Lesson44_1/main.c
#include <stdio.h>
#include "multiply.h"
int main(void) {
int a = 3, b = 7;
int result = multiply(a, b);
printf("積は%dです。\n", result);
return 0;
}3.4. 実行方法
1.「ビルド」 メニューから「ソリューションのビルド」を選択します。

2.ビルドが成功すると、「main.c」「multiply.c」の両方がコンパイルされ、正しくリンクされます。
3.「デバッグ」 メニューから「デバッグなしで開始」を選択します。

4.結果ウィンドウに、次のような出力が表示されます。
計算結果:4 × 7 = 28まとめ
- ソースコード分割は、プログラムの保守性・再利用性・チーム開発を強力にサポートします。
- ヘッダファイルのインクルードガードを正しく使うことで、多重定義エラーを防止できます。
- ファイルの役割や#incldeの使い方も合わせて覚えましょう。
