首页 >后端开发 >C++ >C 标准中的匿名结构是否符合标准?

C 标准中的匿名结构是否符合标准?

DDD
DDD原创
2024-12-07 07:30:12444浏览

Are Anonymous Structs in C   Standard Compliant?

匿名结构:标准与否?

根据 MSDN,匿名结构在 C 中是非标准的。然而,这种说法提出了这种区别是否准确的问题。

标准未命名结构

C 标准(C 03 和 C 11)允许创建未命名结构如下:

struct {
   int hi;
   int bye;
};

这些未命名结构可以是实例化为其他结构体的成员:

struct Foo {
   struct {
      int hi;
      int bye;
   } bar;
};

Visual C 和 GCC 中的匿名结构

Visual C 和 GCC 中通常所说的“匿名结构体”略有不同。这些结构还允许直接通过父对象访问成员:

struct Foo {
   struct { // No member name
      int hi;
      int bye;
   };
};

int main() {
   Foo f;
   f.hi = 3; // Access member without using nested struct
}

非标准匿名结构

直接通过父对象访问成员的功能不具备标准。它是 Visual C 和 GCC 支持的 Microsoft 扩展。 Windows API 标头利用了这种“匿名结构”功能。但是,可以通过在包含 Windows 头文件之前定义 NONAMELESSUNION 来禁用它。

与匿名联合的区别

标准匿名联合还提供直接通过父对象访问成员的方式。例如:

struct Foo {
   union { // No member name
      int hi;
      int bye;
   };
};

int main() {
   Foo f;
   f.hi = 3; // Access member without using nested union
}

结论

标准中的术语“未命名结构”指的是整体类型,而Visual中使用的术语“匿名结构” C和GCC指的是直接通过父对象访问成员的能力。后一个功能是非标准的,尽管它仍然受到流行编译器的广泛支持。

以上是C 标准中的匿名结构是否符合标准?的详细内容。更多信息请关注PHP中文网其他相关文章!

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