next up previous contents
Next: 20.2 構造体が構造体を含む場合の初期化 Up: 20.1 構造体の中の構造体 Previous: 20.1.2 構造体同士の参照

20.1.3 構造体の隠蔽

構造体を同じ名前で宣言した場合、先に宣言された方は見えなくなる。これは、 外部変数とローカル変数の関係に良く似ている。

例2
    struct Test {
        int zenki;
        int kouki;
    };

    main(){
        struct Test {
            char name[30];
            int zenki;
            int kouki;
        };
        struct seiseki{
            struct Test test;
            int shusseki;
        };
        ...
    }

上の例では、main 関数の外で構造体 Test を宣言しているが、同じ 名前の構造体を main 関数の中で宣言している。この場合、main 関数 の外にある方の構造体宣言は、内部の宣言によって隠されて見えなくなる。これを、 隠蔽という。従って、構造体 seiseki のメンバー struct Test test は、直前の構造体 Test の宣言に従うので、メンバー name[], zenki, kouki を持つことになる。

とは言え、よほどの理由がない限り、このようなプログラムは作らない方が良いで あろう。



Noriyo Kanayama