ホームページ > バックエンド開発 > C++ > C では匿名共用体は許可されるのに、匿名構造体は許可されないのはなぜですか?

C では匿名共用体は許可されるのに、匿名構造体は許可されないのはなぜですか?

Susan Sarandon
リリース: 2024-12-11 15:25:12
オリジナル
662 人が閲覧しました

Why Doesn't C   Allow Anonymous Structs While Permitting Anonymous Unions?

C での匿名構造体の不許可の背後にある理論的根拠

C コンパイラは、標準の拡張として匿名の共用体と構造体の使用を許可する場合があります。ただし、標準自体は匿名共用体のみを許可し、匿名構造体は許可しません。この矛盾の背後にあるものは何ですか?

その理由は、C との互換性に起因します。C は匿名共用体をサポートしますが、匿名構造体はサポートしません。互換性を実現するために、C では言語に匿名共用体が組み込まれています。ただし、C では匿名構造体との互換性の要件がないため、標準では省略されています。

さらに、 C では匿名構造体はほとんど役に立ちません。構造体が .v[i] と .x、.y、.z の両方を通じてアクセスできる 3 つの float を保持する例は、C では未定義の動作とみなされます。共用体 (.v[1]) の 1 つのメンバーに書き込み、別のメンバー (.y) から読み取ることは推奨されません。

C は、ユーザー定義型を介した代替ソリューションを提供します。例:

struct vector3 {
  float v[3];
  float &operator[](int i) { return v[i]; }
  float &x() { return v[0]; }
  float &y() { return v[1]; }
  float &z() { return v[2]; }
};
ログイン後にコピー

このコードは、C 標準に準拠しながら、必要な機能を提供します。たとえ特定のコンパイラ拡張機能では匿名構造体を使用することが可能であっても、データ管理には匿名構造体ではなく定義済み構造体を使用することが賢明です。

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

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