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

In article <040823214356.M0123228@sma.gssm.otsuka.tsukuba.ac.jp>, kuno@gssm.otsuka.tsukuba.ac.jp writes
>     そ、そうなの。二重include対策はお約束と思ってた。     久野

僕は「#ifndef _HOGE_H_」は、やるなって教えることが多い。

でも、
    class_a.h
      #include <class_b.h>
      struct class_a { struct class_b *b; }
    class_b.h
      #include <class_a.h>
      struct class_b { struct class_a *a; }
みたいなことをやる学生がいるんで、結構、困るんですよね。
(これを通すためには、#ifndef だけではだめで少し工夫がいるんだけど)

それでも C を使わなきゃいけないのって、なんか不幸。じゃ、
C++ の方が良いかっていうと、どうしても、C++ の(一見便利で
実は邪悪な...) 機能を使う人がでて来ちゃって。

> >  更にそういう実装では、<time.h> が二重 include に堪える仕様
> > になっていないことが多く、結果として二重定義等の error が発
> > 生して compile に失敗してしまうんです。

そのあたりは、最初に教えるときは言わない方が良いと思う。
言いたくなるのはわかるんだけど。僕も最初はそうだったし。

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