新城@筑波大学です。こんにちは。

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;

のように書かないといけない局面があった気がしたんだけど、すぐ
に思い出せません。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\