ホームページ >バックエンド開発 >C++ >匿名構造体は C の標準ですか?

匿名構造体は C の標準ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 08:02:10163ブラウズ

Are Anonymous Structs Standard in C  ?

「匿名構造体」は C の標準ですか?

MSDN は、匿名構造体は C では標準ではないと主張していますが、詳しく調べると次のことが明らかになります。別のシナリオ。 C 標準では「名前のない構造体」を定義していますが、「匿名の構造体」の概念については特に扱っていません。

名前のない構造体の定義

C 標準では、名前のない構造体の宣言。匿名構造体とも呼ばれます。これらの構造体には名前がなく、通常は他の構造体内でネストされた型として使用されます。次のコード スニペットは、名前のない構造体を示しています。

struct Foo {
    struct {
        int hi;
        int bye;
    };
};

このコードは、Foo 構造体内の名前のない構造体を定義します。名前のない構造体は、hi と bye の 2 つのメンバーで構成されます。

匿名構造体のメンバーへのアクセス

標準 C では、ドット演算子を使用して名前のない構造体のメンバーにアクセスできます。 。たとえば、前の例では、hi メンバーは次のようにアクセスできます:

Foo f;
f.hi = 3;

匿名構造体と「メンバーとしての名前のない構造体」

while C 03 C 11 では、「匿名構造体」、つまり名前のない構造体のメンバーにアクセスする現象については明示的に言及していません。それらが親構造体のメンバーであるかどうかについては、特に言及されていません。 「メンバーとしての匿名構造体」として知られるこの動作は、名前のない構造体の標準ではカバーされていません。

MSDN の混乱

MSDN は、名前のない構造体を誤って混同しているようです。匿名構造体をメンバーとして使用します。名前のない構造体は標準ですが、メンバーとしての匿名構造体は、GCC や Visual C などの特定のコンパイラでサポートされる非標準機能です。

結論

まとめると、メンバーとしての匿名構造体は C では標準ではありませんが、名前のない構造体は標準で完全にサポートされています。 「名前のない構造体」と「匿名の構造体」という用語は異なる概念を指します。後者は、名前のない構造体のメンバーに親構造体のメンバーであるかのようにアクセスするという非標準の動作を指します。

以上が匿名構造体は C の標準ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。