分割コンパイル: チーム開発の基本
ファイルを分けることで、大規模な開発が可能になる。「宣言」と「定義」の違いを理解する。
リンク (Linking)
複数のオブジェクトファイル(.o)を結合して、一つの実行ファイルを作ること。
宣言 (Declaration)
「こういう関数があります」とコンパイラに伝えること。ヘッダファイルに書く。
定義 (Definition)
関数の本体(中身)を書くこと。ソースファイル(.c)に書く。
巨大なファイルを分割する
数千行のコードを main.c
一つに書くのはナンセンスです。機能ごとにファイルを分け、それぞれを独立して開発・コンパイルできるようにします。
基本ルールは以下の通りです:
- ヘッダファイル (.h): インターフェース。「どんな関数が使えるか」のカタログ。
- ソースファイル (.c): 実装。「実際に何をするか」の中身。
コードの書き方
// math_utils.h (宣言)#pragma onceint add(int a, int b);// math_utils.c (実装)#include "math_utils.h"
int add(int a, int b) { return a + b;}// main.c (利用)#include <stdio.h>#include "math_utils.h"
int main() { printf("%d\n", add(1, 2)); return 0;}コンパイルの流れ
ファイルを分割したら、それぞれの `.c` をコンパイルして `.o` (オブジェクトファイル) を作り、最後にそれらを結合(リンク)します。
# コンパイル方法gcc -c main.c # main.o ができるgcc -c math_utils.c # math_utils.o ができる
# リンク (結合)gcc main.o math_utils.o -o my_app演習課題
課題1: 3ファイル構成
上の例を実際に作成し、コマンドラインでコンパイル・実行してみてください。
合格ライン
.hと.cの役割の違いを説明できる
複数のファイルをリンクして実行ファイルを作れる