“匿名结构”是 C 中的标准吗?
MSDN 声称匿名结构在 C 中是非标准的,但仔细检查会发现不同的场景。虽然 C 标准定义了“未命名结构”,但它并没有专门解决“匿名结构”的概念。
定义未命名结构
C 标准允许未命名结构的声明,也称为匿名结构。这些结构没有名称,通常用作其他结构中的嵌套类型。以下代码片段演示了一个未命名的结构:
此代码在 Foo 结构中定义了一个未命名的结构。未命名结构由两个成员组成:hi 和 bye。
访问匿名结构的成员
标准 C 允许使用点运算符访问未命名结构的成员。例如,在前面的示例中,可以按如下方式访问 hi 成员:
匿名结构与“未命名结构作为成员”
While C 03和 C 11 没有明确提及“匿名结构”,即访问未命名结构成员的现象,就好像它们是父结构的成员,没有具体提及。这种行为被称为“匿名结构作为成员”,未包含在未命名结构的标准中。
MSDN 的混乱
MSDN 似乎错误地将未命名结构与匿名结构作为成员。虽然未命名结构是标准的,但作为成员的匿名结构是某些编译器(例如 GCC 和 Visual C)支持的非标准功能。
结论
总之,虽然匿名结构作为成员在 C 中不是标准的,标准完全支持未命名结构。术语“未命名结构”和“匿名结构”指的是不同的概念,后者指的是访问未命名结构的成员的非标准行为,就好像它们是父结构的成员一样。
以上是匿名结构是 C 中的标准吗?的详细内容。更多信息请关注PHP中文网其他相关文章!