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