「匿名構造体」は 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 サイトの他の関連記事を参照してください。