Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

4.7 名前のない struct 宣言の使用

名前のない struct 宣言は、struct のタグも、オブジェクト名も、typedef 名も指定されていない宣言です。C++ では、名前のない struct は認められていません。

-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 は、名前のない共用体と同じ制約を受けます。

コードを有効にするには、次のようにそれぞれの struct に名前を付けます。

union U {
  struct {
    int a;
    double b;
  } A;
  struct {
    char* c;
    unsigned d;
  } B;
};
U u;