【6日でできるC言語入門】ソースコード分割

Visual Studio 2022でソースコードを分割しよう

C言語でプログラムを開発していると、ソースコードが長くなりがちです。
 Visual Studio 2022 では、機能ごとにファイルを分けて管理することで、プログラムを見やすく、保守しやすくできます。ここでは、ヘッダファイル(.h)ソースファイル(.c) を用いた、ソースコード分割の基本的な方法と操作手順を、実際の操作画面をイメージしながら解説します。

1.プロジェクトの準備と基本操作

1.1. 新しいC言語プロジェクトの作成

1.Visual Studio 2022を起動します。

2.「新しいプロジェクトの作成」を選択して「次へ」ボタンをクリックします。

3.「空のCプロジェクト」または「空のプロジェクト」を選択し、プロジェクト名(例:MultiFileSample)を入力して「作成」ボタンをクリックしてプロジェクトを開始します。

1.2. メインのソースファイルを追加

1.ソリューションエクスプローラーで「ソースファイル」フォルダーを右クリックし、「追加」→「新しい項目」を選択します。

2.「FileName.cpp」を「main.c」に変更し「追加」をクリックします。

1.3. ヘッダーファイルの役割とは?

ヘッダーファイルの役割

C言語のヘッダーファイル(拡張子 .h)は、主に次のような役割を持っています。

役割説明
関数のプロトタイプ宣言他のファイルから呼び出したい関数の「型」や「引数の型」を事前に知らせる。
マクロや定数の定義#define などで定数や便利な式を定義する。
構造体・共用体・列挙体の定義複数のファイルで同じ型情報を共有するために利用
インクルードガードの設定同じヘッダが複数回読み込まれてもエラーが起きないようにする。

ポイント
ヘッダーファイルを使うことで、「どのファイルからでも同じ関数や型、定数を安全に使う」ことができるようになります。
特に複数ファイルを使う中規模以上の開発や、複数人によるチーム開発で不可欠な仕組みです。

ヘッダーファイルの定義方法

ヘッダーファイルには主に関数のプロトタイプ宣言マクロ定義構造体定義などを書きます。
また、「インクルードガード」を必ず設定しましょう。

例:multiply.h の定義

インクルードガード
同じヘッダファイルが複数回読み込まれても、一度だけしか内容が展開されません。
これにより多重定義によるコンパイルエラーを防ぎます。

#ifndef _MULTIPLY_H_    // インクルードガード(1行目)
#define _MULTIPLY_H_    // インクルードガード(2行目)

// ここにプロトタイプ宣言
int multiply(int, int); // 2つのint値を掛け算する関数

#endif // _MULTIPLY_H_  // インクルードガード(終了)

ヘッダーファイルを使う流れ

  1. ヘッダファイル(.h) に関数のプロトタイプ宣言を書きます。
  2. ソースファイル(.c) で、そのヘッダファイルを#includeします。
  3. 関数の本体(処理)は、通常ソースファイル側に記述します。
具体例
  • multiply.h(プロトタイプ宣言)
  • multiply.c(関数の本体)
  • main.c#include "multiply.h" で関数を利用)

補足:どんな内容を書けばよい?

ヘッダファイルに書くもの具体例
関数プロトタイプ宣言int add(int, int);
定数の定義#define MAX_VALUE 100
構造体の定義typedef struct { int x; int y; } Point;

 main.cや他の.cファイルで使いたい宣言は、できるだけヘッダファイルにまとめておくと、再利用性が高まり、管理も楽になります。

ポイント

  • ヘッダファイルは「関数の宣言」や「型情報」、「マクロ」などをまとめて管理するファイルです。
  • インクルードガードを付けて多重読み込みを防ぎます。

2.ヘッダファイルとソースファイルの追加・記述

2.1. main.cの記述例

main.c ではヘッダファイルをインクルードし、multiply関数を利用します。

#include <stdio.h>
#include "multiply.h"

int main(void) {
    int x = 4, y = 7;
    int result = multiply(x, y);
    printf("計算結果:%d × %d = %d\n", x, y, result);
    return 0;
}

2.2. ヘッダファイルの追加(multiply.h)

1.ソリューションエクスプローラーで「ヘッダーファイル」フォルダーを右クリックし、「追加」→「新しい項目」を選択します。

2.「ヘッダーファイル(.h)」を選び、「multiply.h」と入力し、[追加]をクリックします。

multiply.hには、関数のプロトタイプ宣言とインクルードガードを記述します。

#ifndef _MULTIPLY_H_
#define _MULTIPLY_H_

int multiply(int, int);

#endif // _MULTIPLY_H_

2.3. サブのソースファイルの追加(multiply.c)

1.「ソースファイル」フォルダーを右クリックし、「追加」→「新しい項目」→「C++ファイル(.cpp)」を選び、「multiply.c」と入力します。

2.multiply.c には、ヘッダファイルをインクルードし、関数本体を記述します。

#include "multiply.h"

int multiply(int a, int b) {
    return a * b;
}

3.ビルドと実行

3.1. ビルド(コンパイル)の方法

1.「ビルド」 メニューから「ソリューションのビルド」を選択します。

2.ビルドが成功すると、「main.c」「multiply.c」の両方がコンパイルされ、正しくリンクされます。

2:28 でビルドが開始されました...
1>------ ビルド開始: プロジェクト: MultiFileSample, 構成: Debug x64 ------
1>main.c
1>multiply.c
1>コードを生成中...
1>MultiFileSample.vcxproj -> C:\Users\joeac\source\repos\MultiFileSample\x64\Debug\MultiFileSample.exe
========== ビルド: 成功 1、失敗 0、最新の状態 0、スキップ 0 ==========
=========== ビルド は 2:28 で完了し、00.874 秒 掛かりました ==========

3.2. 実行方法

1.「デバッグ」 メニューから「デバッグなしで開始」を選択します。

2.結果ウィンドウに、次のような出力が表示されます。

計算結果:4 × 7 = 28

4.ソースコード分割のポイントと注意点

項目説明・ポイント
インクルードガードヘッダファイルでの多重読み込み防止
#include の使い方必要な場所で適切にヘッダファイルを読み込む。
関数のプロトタイプ宣言ヘッダファイルで行い、実装は.cファイルで行う。
ファイルごとの役割分担複数人開発や保守性向上に有効

まとめ

  • Visual Studio 2022では、ソースファイルとヘッダファイルを使い分けてコードを分割することで、プログラムが大きくなっても管理しやすくなります。
  • 各ファイルはソリューションエクスプローラーから追加・編集ができます。
  • 関数をヘッダファイルとソースファイルで適切に分けて記述し、ビルドして正しく動作することを確認しましょう。