ソースファイル
CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 3/61。
これまで、function の宣言はヘッダーファイルに配置してきましたが、実際の function のコード(定義)は main ファイルに置かれていました。モジュール型プログラミングの次のステップは、これらの定義を専用のソースファイル(.cファイル)に移動することです。
これにより、すっきりした3つの部分から成る構造が作られます。header では関数を宣言し、別のソース file でそれらを定義し、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 が自身の header をインクルードしていることに注目してください。これにより、function の定義が宣言と一致することが保証されます。一致しない場合、コンパイラーがエラーを検出します。main ファイルでは、function を使用するために header をインクルードするだけでよく、add が内部でどのように動作するかを知る必要はありません。
この分離により実装の詳細が隠され、これらの関数を使用するファイルに触れることなく関数のロジックを変更できます。
チャレンジ
簡単コードを適切な3ファイル構成に整理して、シンプルな math utility を作りましょう。宣言用の header、実装用の source file、そしてそれらを使用する main file を用意します。
3つのファイルを作成します。
math_ops.h:2つの操作multiplyとsubtractの function 宣言を含む header file です。どちらの function も two integers を受け取り、integer を返します。シンボルMATH_OPS_Hを使用した include guards を忘れないでください。math_ops.c:multiplyとsubtractの実際の実装を含む source file です。宣言と定義が一致するように、この file 自身の header を include する必要があります。main.c:header を include し、両方の function を使用して計算を行う main file です。
multiply function は two integers の product を返し、subtract は first integer から second を引いた結果を返します。
integer の入力を2つ受け取ります:a と b。
main function で、両方の操作の results を別々の行に Print します。
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: multiply関数をaとbで呼び出し、結果を格納する
// TODO: subtract関数をaとbで呼び出し、結果を格納する
// TODO: 結果を次の形式で出力する:
// Product: {multiplyの結果}
// Difference: {subtractの結果}
return 0;
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ