ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: C++ ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
4.9 静的名前空間スコープ関数のクラスフレンドとしての宣言
4.10 事前定義済み __func__ シンボルの関数名としての使用
名前のない構造体宣言は、構造体のタグも、オブジェクト名も、typedef 名も指定されていない宣言です。C++ では、名前のない構造体は認められていません。
-features=extensions オプションを使用すると、名前のない struct 宣言を使用できるようになりますが、これは共用体のメンバーとしてのみ使用できます。
次は、-features=extensions オプションを使用した場合にコンパイルが可能な、名前のない不正な struct 宣言の例です。
union U { struct { int a; double b; }; // invalid: anonymous struct struct { char* c; unsigned d; }; // invalid: anonymous struct };
これらの構造体のメンバー名は、構造体名で修飾しなくても認識されます。たとえば、共用体 U が前述のコードのように定義されているとすると、次のような記述が可能です。
U u; u.a = 1;
名前のない構造体は、名前のない共用体と同じ制約を受けます。
コードを有効にするには、次のようにそれぞれの struct に名前を付けます。
union U { struct { int a; double b; } A; struct { char* c; unsigned d; } B; }; U u; U.A.a = 1;