首页 >后端开发 >C++ >为什么 C 不允许匿名结构而允许匿名联合?

为什么 C 不允许匿名结构而允许匿名联合?

Susan Sarandon
Susan Sarandon原创
2024-12-11 15:25:12611浏览

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

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn