Re: Mutual refrence of struct / 構造体相互参照
yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:
> ということなのでしょう。それで、 a.h, b.h には、でも、struct
> 本体は、書かないで隠したくなるんだけどなあ。a.c, b.c の方に
> 定義して。
賛成。
学生に教え込むんなら、もう、全部 抽象データ型にさせちゃって、実装は隠
すことにしちゃうと、話が簡単になりませんかね。
#define AbsType(type) typedef struct type##_impl *type
しておいて、
#ifndef FOO_H
#define FOO_H
AbsType(foo);
AbsType(bar);
foo make_foo(void);
void foo_bar_method(foo, bar);
...
#endif
とか。んで、struct foo_impl の定義は foo.c にしか出てこない。
struct bar_impl の定義は bar.c にしか出てこない。
こうすれば、相互依存しててもあんまり気にする必要ないですよね。
(でも、全部 抽象データ型への参照で扱うと、GCが欲しくなる。
上のやりかただとgetter/setterもインラインに書けないし。
で、けっきょくJavaへ...)
kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> Linux kernel 2.6 は、そのあたり、もうあきらめていて、
>
> すべてのファイルがinclude するのは、config.h だけ
>
> で、config.hには、すべてのinclude file がflatに入っている
> っていう構造になっている...
1行変更しても、全部コンパイルし直しなんですよねえ。
> > #プリプロセッサーが自動チェックしてくれればいいんですが。
>
> それでもいいんだけど...
>
> *.h を手で書かせるな
>
> って気もかなりするんだよな。
Modula-2やAdaみたいな緊縛マゾ言語にしてガチガチにチェックするでもなし、
Javaみたいに依存関係を自動で見てくれるでもなし、中途半端ですよねえ。
前田敦司
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