第19問

第14問で取り上げた「三角形の面積を計算して表示するプログラム」から、「三角形の面積を計算する」部分だけを別のモジュールに切り分けました。以下はそのヘッダーファイルですが、C言語としてぜひ入れておきたい要素が足りません。

このヘッダーファイルに何が足りないか分かりますか?
triangle.h
typedef struct {
  double base;
  double height;
} Triangle;

double TriangleArea(const Triangle *triangle);

なお、このモジュールは別のソースファイル内から、次のように使用することを想定しています。

main.c
#include <stdio.h>
#include <stdlib.h>
#include "triangle.h" /* ヘッダーファイルをインクルード */

int main(void) {
  Triangle triangle = { /* 「三角形」の構造体を使用 */
    .base = 6.0,
    .height = 4.0
  };

  printf("area = %f\n", TriangleArea(&triangle)); /* 面積を計算 */

  return EXIT_SUCCESS;
}
実行結果
area = 12.000000
このプログラムが、2つのモジュールでできているのが分かるかしら?
はい。「triangle」と「main」ですね。
そうね。上には「triangle」のヘッダーファイルしか掲載しなかったけれど、ほんとは実装ファイルもあるのよ。
ヘッダーが「triangle.h」だから、実装は「triangle.c」ですかね。
そういうこと!ちなみに、中身はこんな感じ。
triangle.c
#include "triangle.h"

double TriangleArea(const Triangle *triangle) {
  return triangle->base * triangle->height / 2.0;
}
それで、今回のプログラムは間違ってはいないんですよね。
間違いとまでは言えないけれど、ぜひ入れておいてほしい記述がないの。
ヘッダーファイルに何かを足せばいいんですね。ええと……
ヘッダーファイルは、いつでも、どこからでもインクルードできれば便利ですね。