Re: struct timeval
河野真治 @ 琉球大学情報工学です。
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
河野真治 @ 琉球大学工学部情報工学科
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735