1

私はいくつかのプロパティを持つ構造体を持っています:

struct a {
    char* id;
    int a;
    int b;
    int c;
}

同じプロパティを持つ構造体もありますが、id.

struct b {
    int a;
    int b;
    int c;
}

C11 が匿名構造体をサポートしていることはわかっているので、次のようなことができます。

struct a {
    char* id;
    struct {
        int a;
        int b;
        int c;
    }
}

ただし、内部構造体にタグを付けると失敗します。のような非標準のコンパイラ オプションを使用せずに、このようなネストされた構造体を作成することは可能-fms-extensionsですか?

4

1 に答える 1

1

C11 では、内部構造に名前またはタグ、またはその両方を付けることができます (つまり、拡張子を使用しません)。

タグも名前もない場​​合、内部構造は C11 匿名構造になります。

struct a {
    char* id;
    struct {
        int a;
        int b;
        int c;
    };
 };

内部の無名構造に名前を付けると、無名構造ではなくなります。これは通常の C89/C99/C11 構造体メンバーであり、無名構造体のように内部構造体メンバーに直接アクセスすることはできません。

内部の無名構造にタグを付けた場合 (ただし名前はまだありません)、それは単なる C89/C99/C11 構造宣言です。追加されたメンバーはなく、の宣言はstruct a次と同じです。

struct a {
    char* id;
};
于 2013-01-01T19:33:15.080 に答える