Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!news.daionet.gr.jp!news.yamada.gr.jp!newsfeed.media.kyoto-u.ac.jp!oix.u-ryukyu.ac.jp!u-ryukyu.ac.jp!ie.u-ryukyu.ac.jp!gama.is.tsukuba.ac.jp!yas From: yas@is.tsukuba.ac.jp (Yasushi Shinjo) Newsgroups: fj.comp.lang.c Subject: Mutual refrence of struct / 構造体相互参照 Date: 24 Aug 2004 09:00:56 GMT Organization: Institute of Information Sciences and Electronics, University of Tsukuba Lines: 43 Message-ID: References: <3990299news.pl@insigna.ie.u-ryukyu.ac.jp> NNTP-Posting-Host: kirk.hlla.is.tsukuba.ac.jp X-Trace: gama.is.tsukuba.ac.jp 1093338022 7909 130.158.85.129 (24 Aug 2004 09:00:22 GMT) X-Complaints-To: usenet@gama.is.tsukuba.ac.jp NNTP-Posting-Date: 24 Aug 2004 09:00:22 GMT In-reply-to: kono@ie.u-ryukyu.ac.jp's message of Mon, 23 Aug 2004 13:02:56 +0000 (UTC) Xref: ccsf.homeunix.org fj.comp.lang.c:362 新城@筑波大学です。こんにちは。 In article <3990299news.pl@insigna.ie.u-ryukyu.ac.jp> kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes: > class_a.h > #include > struct class_a { struct class_b *b; } > class_b.h > #include > struct class_b { struct class_a *a; } > みたいなことをやる学生がいるんで、結構、困るんですよね。 > (これを通すためには、#ifndef だけではだめで少し工夫がいるんだけど) struct class_a の中で struct class_b を使うとしても、ポイン タだったら、struct class_b の定義は不要です。 % cat struct-mutual.c struct class_a { struct class_b *b; }; main() { struct class_a a1; printf("%d\n", sizeof(a1) ); } % gcc struct-mutual.c -o struct-mutual % ./struct-mutual 4 % ポインタではなくて、構造体本体の参照なら、必要になります。 データ構造で構造体の相互参照が出てくるのは、表現したい対象が そうなっているなら、そうするんじゃないですか。自然だし。 工夫というと、 struct class_a; のように書かないといけない局面があった気がしたんだけど、すぐ に思い出せません。 \\ 新城 靖 (しんじょう やすし) \\ \\ 筑波大学 電子・情報       \\