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

C の匿名構造体は標準に準拠していますか?

Linda Hamilton
リリース: 2024-12-10 00:40:14
オリジナル
495 人が閲覧しました

Are Anonymous Structures in C   Standard Compliant?

「匿名構造体」は C の標準ですか?詳細な分析

はじめに

C の「匿名構造体」の概念は、その標準化と正確な性質について疑問を引き起こしました。この記事は、関連するドキュメントを調べ、さまざまな種類の匿名構造間の微妙な違いを調査することによって、これらの問題を明確にすることを目的としています。

匿名構造は非標準ですか?

によるとMicrosoft の MSDN ドキュメントによると、匿名構造体 (名前なしで定義された構造体) は C では非標準とみなされます。ただし、ISO C 標準では、この側面について明示的には扱っていません。

匿名構造について

名前のない構造体:
C 標準では、名前のない構造体 (名前のない構造体) の宣言用。インスタンス化して通常の名前付き構造体として使用できます。 structs.

匿名構造体:
匿名構造体は、名前のない構造体のメンバーに直接アクセスできるようにする、一部の C コンパイラー (GCC や Visual C など) の特定の機能を指します。含まれるオブジェクト。

違い

主な違いは、メンバーのアクセシビリティにあります。名前のない構造体の場合、メンバーは標準のドット演算子 (foo.bar など) を介してアクセスできますが、匿名構造体では構造体名を指定せずにメンバーに直接アクセスできます (foo.hi など)。

標準と非標準

標準は名前のない構造体の機能を定義しますが、そうではありません具体的には、メンバーに直接アクセスする「匿名」動作です。したがって、後者は、特定のコンパイラでサポートされる非標準機能とみなされます。

使用例

標準の名前のない構造体:

struct Foo {
   struct {
      int hi;
      int bye;
   } bar;
};
ログイン後にコピー

非標準の匿名構造体:

struct Foo {
   struct {
      int hi;
      int bye;
   }; // <--- no member name!
};
ログイン後にコピー

2 番目の例では、メンバーに直接アクセスできます:

f.hi = 3; // Non-standard, compiler-dependent feature
ログイン後にコピー

結論

匿名構造体、含まれているオブジェクトからメンバーに直接アクセスできる機能によって定義されるように、これは特定の C コンパイラでサポートされる非標準機能です。標準 C は名前のない構造体の機能を提供しますが、メンバーへの直接アクセスは指定されておらず、サポートされることも保証されていません。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート