“匿名结构”是 C 语言的标准吗?详细分析
简介
C 中“匿名结构”的概念引发了对其标准化和精确性的质疑。本文旨在通过检查相关文档并探讨不同类型的匿名结构之间的细微区别来澄清这些问题。
匿名结构是非标准的吗?
根据微软的MSDN文档中,匿名结构(没有名字定义的结构)被认为是C语言中的非标准。然而,ISO C 标准没有明确解决这方面的问题。
理解匿名结构
未命名结构:
C 标准允许用于声明未命名结构(没有名称的结构),可以将其实例化并用作常规命名结构结构体。
匿名结构体:
匿名结构体是指某些 C 编译器(例如 GCC 和 Visual C)中的特定功能,允许直接从包含对象。
区别
主要区别在于会员的可访问性。对于未命名结构,可以通过标准点运算符访问成员(例如 foo.bar),而匿名结构允许直接访问成员而无需指定结构名称(例如 foo.hi)。
标准与非标准
标准定义了未命名的功能结构体,但不是直接访问成员的“匿名”行为。因此,后者被认为是某些编译器支持的非标准功能。
使用示例
标准未命名结构:
struct Foo { struct { int hi; int bye; } bar; };
非标准匿名结构体:
struct Foo { struct { int hi; int bye; }; // <--- no member name! };
在第二个例子中,可以直接访问成员:
f.hi = 3; // Non-standard, compiler-dependent feature
结论
匿名结构体,正如它们直接访问包含对象的成员的能力所定义的,是某些 C 编译器支持的非标准功能。标准 C 提供了未命名结构的功能,但未指定成员的直接可访问性,并且不保证支持。
以上是C 标准中的匿名结构是否符合标准?的详细内容。更多信息请关注PHP中文网其他相关文章!