Mutual refrence of struct / 構造体相互参照
新城@筑波大学です。こんにちは。
In article <3990299news.pl@insigna.ie.u-ryukyu.ac.jp>
kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 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 だけではだめで少し工夫がいるんだけど)
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;
のように書かないといけない局面があった気がしたんだけど、すぐ
に思い出せません。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
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