無名共用体
共用体:インデックス への移動
タグを持たず、名前のあるオブジェクト(または他の型)の宣言に使用されない共用体は、無名共用体、と呼ばれます。これは次の形式です:
union { member_list };
このメンバーには、共用体が宣言されたスコープ内では、構文 x.y または p->y を使用しなくても、直接アクセスすることができます。
無名共用体は、グローバル、入れ子、非入れ子のいずれにすることもできます。ANSI-C では、無名共用体を使用できません。ANSI-C++ では、無名共用体の 3 つのタイプすべて使用することができます。
C++ 無名共用体
無名共用体は、メンバー関数や、private または protected メンバーを持つことはできません。ファイル レベルでは、無名共用体は静的に宣言される必要があります。ローカルの無名共用体は、自動または静的でなければならず、言い換えると、無名共用体は、外部リンクを持つことはできません。入れ子になっていない無名共用体は、C++ でのみ使用できます。
入れ子無名共用体
入れ子になった無名共用体の外側の構造体、クラス、共用体には、タグがなければなりません。C および C++ では、デフォルトで入れ子になった無名共用体を使用できます。C でのみ、入れ子無名共用体は、任意でタグを持つことができます。
例:
struct outer {
int x;
};
int main(void)
{
struct outer o;
}