#ifndef __FILENAME_H__ #define __FILENAME_H__ /* ファイルの中身 */ #endif /* !defined(__FILENAME_H__) */このおまじないは、同じ宣言を 2 度以上読み込まないようにするためのものです。 もし、この header file を同じ XXX.c file から 2 度読み込んだ場合でも、 2 度目の読み込みにおいては、すでに __FILENAME_H__ が define されている ので、2 度読み防止できるわけです。
同じ XXX.c ファイルから同じ header file を直接 2 回読み込むことは、 まあないでしょう。 ただ、header file で別の header file を include することもあるわけです。 例えば、コンポーネント B は、コンポーネント A を利用しており、 コンポーネント B を利用する場合は必ずコンポーネント A の宣言群を取り込む必要 があるとします。
この場合、コンポーネント B の作成者は、その B.h 中に、
/* B.h 中に、 */ #include "A.h"と書くわけです。これとは別に、 コンポーネント B ユーザが直接 A.h を取り込んでいる場合、 A.h が 2度取り込まれる おそれがあるというわけです。
2001.10.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp