9.35 匿名クラス、匿名構造体、匿名共用体

匿名クラス、匿名構造体、匿名共用体は、拡張機能としてサポートされています。また、匿名構造体、および匿名共用体は、C および C++ でサポートされています。

デフォルトでは、匿名共用体は C++ で使用できます。ただし、以下の場合は、anon_unions プラグマを指定する必要があります。
  • C で匿名共用体と匿名構造体を使用する場合。
  • C++ で匿名クラスと匿名構造体を使用する場合。
匿名共同体は、 typedef の名前によって、それを保持するクラスに導入できます。この共用体は、実際の匿名共用体とは異なり、直接宣言する必要はありません。以下に例を示します。
typedef union
{
    int i, j;
} U;                 // U は再利用可能な匿名共用体を表す
#pragma anon_unions
class A
{
    U;               // OK -- A::i と A::j の参照が可能
};
この拡張機能によって、匿名クラスと匿名構造体を使用できます。ただし、C++ の機能が使用されていないことが条件です。例えば、スタティックデータメンバやメンバ関数、非公開メンバ、およびネストされている型(匿名クラス、匿名構造体、匿名共用体を除く)は、匿名クラスおよび匿名構造体では使用できません。以下に例を示します。
#pragma anon_unions
struct A
{
    struct
    {
        int i, j;
    };               // OK -- i および j は
};                   // クラス A を通じて参照可能。
int foo(int m)
{
    A a;
     a.i = m;
     return a.i;
}
関連する参考文書
10.77 #pragma anon_unions、#pragma no_anon_unions
関連情報
Which GNU language extensions are supported by the ARM Compiler?
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.