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 サイトの他の関連記事を参照してください。