河野真治 @ 琉球大学情報工学です。

In article <cge534$7ac$1@caraway.media.kyoto-u.ac.jp>, 吉見 隆<tak-yoshimi@NOSWENrio.odn.ne.jp> writes
> >僕は「#ifndef _HOGE_H_」は、やるなって教えることが多い。
> やるなという心は何ですか?
> 学生が自分で使うプログラム用のヘッダを書くときの話でしょうか?

自分でプログラムを書く時に、不必要に複雑な依存関係を入れるな、
っていうことなんだけど。まず、そういうものなしに動く構造で書
けるかどうかを試すべきだと思う。

相互依存は、再帰includeでも解決できないから、そのあたりで
はまる学生もいるし。(多くはないが)

> システムのヘッダーでも別のヘッダーをincludeしているのは珍しくないんで
> すが、もし二重include対策をしていなければユーザーはincludeする前にすべ
> てのヘッダーのincludeファイルを遡ってチェックしなければならなくなりま
> す。

本来、二重includeチェックって必要ないはずですよね。ちゃんと、木構造
になっていれば良いはず。

      hoge_func() を使う => hoge.h を include

ってなっていて、それだけであるべきだと思う。

      hoge_func_a() を使う => hoge.h を include
      hoge_func_b() を使う => hoge.h を include

で、hoge.h を二回includeしても動くべきだっていう話もあるし、
僕もそうであるべきだと思うけど、それでも、二重includeチェックなし
で動くべきだと思います。

Linux kernel 2.6 は、そのあたり、もうあきらめていて、

      すべてのファイルがinclude するのは、config.h だけ

で、config.hには、すべてのinclude file がflatに入っている
っていう構造になっている...

> #プリプロセッサーが自動チェックしてくれればいいんですが。

それでもいいんだけど...

    *.h を手で書かせるな

って気もかなりするんだよな。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科