C 中不允許使用匿名結構的基本原理
C 編譯器可能允許使用匿名聯合和結構作為標準的擴展。然而,標準本身只允許匿名聯合,而不允許匿名結構。這種差異背後的原因是什麼?
原因源自於與 C 的兼容性。 C 支援匿名聯合,但不支援匿名結構。為了實現相容性,C 將匿名聯合合併到其語言中。但是,C 中沒有與匿名結構相容的要求,因此標準中省略了它們。
此外,匿名結構在 C 中沒有什麼用處。在提供的範例中,一個結構體包含三個可透過 .v[i] 和 .x、.y、.z 存取的浮點數,在 C 中被視為未定義行為。不鼓勵寫入聯合體的一個成員 (.v[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中文網其他相關文章!