C言語入門|#include によるソースコード分割の基本

― 大きなプログラムを整理して作る第一歩

ここまでの学習では、1つのソースファイルにすべての処理を書いてプログラムを作ってきました。
小さなサンプルであればそれでも問題ありませんが、機能が増えてくると、次のような悩みが出てきます。

  • ソースコードが長くなりすぎて読みにくい。
  • どこに何が書いてあるのかわからなくなる。
  • 複数人で作業しようとしても、同時に編集できない。

こうした問題を解決するために欠かせないのが、
ソースコードの分割です。

C言語では、この分割を支える基本的な仕組みとして
#include 命令が用意されています。

#include を使うと何ができるのか

#include は、もともとヘッダファイルを取り込むために使ってきました。
しかし実は、#include は 任意のファイルをその場に展開する命令 です。

つまり、

  • 別のソースファイルに処理を書いておき
  • それを #include で取り込む

ということも可能です。

まずは、分割の仕組みを理解するために、
あえてシンプルな構成で例を見てみましょう。

分割したソースファイルの例

次の例では、処理を2つのファイルに分けています。

サンプルプログラム

sub.c

#include <stdio.h>

void sub_message(void)
{
    printf("sub file called\n");
}

main.c

#include <stdio.h>
#include "sub.c"

int main(void)
{
    sub_message();
    printf("main file finished\n");
    return 0;
}

この構成では、main.c の中で
sub.c の内容を #include によって取り込んでいます。

GCCでのビルド方法

GCCを使う場合、次のようにコンパイルできます。

gcc main.c

このとき、プリプロセッサは次の処理を行います。

  • main.c を読み込む。
  • #include "sub.c" を見つける。
  • sub.c の内容をその場に展開する。

結果として、1つの大きなソースコードとしてコンパイラに渡されます。

Visual Studioでの実行手順

Visual Studio を使う場合は、次の手順でソースファイルを追加します。

  1. ソリューションエクスプローラーで「ソースファイル」をクリック
  2. 「追加」→「新しい項目」を選択
  3. 「FileName.cpp」を「sub.c 」に変更し「追加」をクリック
  4. 同様に main.c を作成
  5. メニューの「ビルド」→「ソリューションのビルド」を実行
  6. メニューの「デバッグ」→「デバッグの開始」を選択して実行

複数のソースファイルがあっても、
Visual Studio が自動的にまとめてビルドしてくれます。

< > と " " の違い

ここで、1つ気になる点が出てきます。

  • stdio.h は < > で囲んでいる。
  • sub.c は " " で囲んでいる。

この違いは、ファイルを探しに行く場所にあります。

#include の2つの書き方

➀ <ファイル名> の場合
#include <stdio.h>➀
  • コンパイラがあらかじめ決めた
    インクルード用ディレクトリからファイルを探す。
  • 標準ライブラリのヘッダファイルで使用する。
➁ "ファイル名" の場合
#include "sub.c"
  • まず、現在のソースファイルと同じディレクトリを探す。
  • 見つからなければ、インクルード用ディレクトリを探す。

そのため、

  • 標準で用意されているファイル → < >
  • 自分で作成したファイル → " "

という使い分けが基本になります。

なぜこの方法で分業できるのか

#include による分割を使えば、

  • 機能ごとにファイルを分けられる。
  • 他の人が作った処理をそのまま取り込める。
  • 自分の担当部分に集中して作業できる。

といった利点があります。

これが、
分業による開発効率向上の第一歩です。

ただし、ここで紹介した
「ソースファイルを直接 #include する方法」は、
あくまで仕組み理解のための導入です。

実務や本格的な開発では、
ヘッダファイルを使った分割方法へと進んでいきます。