ソースファイル
CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 3/61。
これまでは関数宣言をヘッダーファイルに配置し、実際の関数コード(定義)はメインファイルに置いていました。モジュール型プログラミングの次のステップは、それらの定義を専用のソースファイル(.cファイル)に移すことです。
これにより、明確な3部構成ができます。ヘッダーファイルで関数を宣言し、別のソースファイルで定義し、mainではそれらを使うだけです。次のようになります。
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
// 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(5, 3));
return 0;
}
math_utils.cが自身のヘッダーファイルをインクルードしていることに注目してください。これにより、関数定義が宣言と一致していることが保証されます。一致しない場合は、コンパイラーがエラーを検出します。関数を使うには、メインファイルでヘッダーファイルをインクルードするだけでよく、addが内部でどのように動作するかを知る必要はありません。
この分離によって実装の詳細が隠され、それらの関数を使用するファイルに触れることなく関数のロジックを変更できます。
チャレンジ
簡単コードを適切な3ファイル構成に整理して、シンプルな数学ユーティリティを作りましょう。宣言用のヘッダーファイル、実装用のソースファイル、それらを使用するメインファイルを用意します。
次の3つのファイルを作成します。
math_ops.h: 2つの演算用関数、multiplyとsubtractの宣言を含むヘッダーファイルです。どちらの関数も2つの整数を受け取り、整数を返します。シンボルMATH_OPS_Hを使ったインクルードガードも忘れずに設定してください。math_ops.c:multiplyとsubtractの実際の実装を含むソースファイルです。宣言と定義が一致するように、このファイル自身のヘッダーファイルをインクルードしてください。main.c: ヘッダーファイルをインクルードし、計算に両方の関数を使用するメインファイルです。
multiply関数は2つの整数の積を返し、subtract関数は1つ目の整数から2つ目の整数を引いた値を返します。
整数の入力値として、aとbを受け取ります。
メイン関数で、両方の演算結果を別々の行に出力してください。
Product: {result of multiply}
Difference: {result of subtract}たとえば、入力が8と3の場合、出力は次のようになります。
Product: 24
Difference: 5自分で試してみよう
#include <stdio.h>
#include "math_ops.h"
int main() {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
// TODO: a と b を引数にして multiply 関数を呼び出し、結果を保存する
// TODO: a と b を引数にして subtract 関数を呼び出し、結果を保存する
// TODO: 結果を次の形式で出力する:
// 積: {multiply の結果}
// 差: {subtract の結果}
return 0;
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ