首页  >  文章  >  后端开发  >  为什么 C 不支持结构体的指定初始化器?

为什么 C 不支持结构体的指定初始化器?

Patricia Arquette
Patricia Arquette原创
2024-11-01 14:05:29303浏览

Why Doesn't C   Support Designated Initializers for Structs?

C 结构初始化:探索不同的方法

在 C 中,结构初始化经常会引发关于使用类似于以下特定语法的可能性的问题:本文深入探讨了结构初始化的技术和实践方面,解决了为什么 C 中没有实现特定语法的问题。

指定初始化语法

如问题所示,C 支持指定的初始化语法,允许初始化结构体的特定成员。但是,C 中不支持此语法。

C 中不支持的原因

由于以下几个原因,指定的初始化语法未在 C 中实现:

  • 无名数据成员: C 结构体可以具有未命名或匿名数据成员,这使得指定的初始化器将引用哪个成员变得不明确。
  • 改进的清晰度和可读性: 现代 C 初始化技术提供了更明确和可读的方法来初始化结构,如下所述。

替代初始化方法

为了在没有指定初始化语法的情况下实现所需的可读性,C 提供了替代方法:

带注释的拆分初始化器:

将初始化器分解为多行每个注释都提供了分配值的清晰指示:

address temp_address = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};

C 17 的结构化绑定:

C 17 引入了结构化绑定,它允许为 struct 分配值使用命名变量的成员:

auto [street_no, street_name, city, prov, postal_code] = std::make_tuple(0, nullptr, "Hamilton", "Ontario", nullptr);

这种方法提供了显式赋值并增强了可读性。

结论

而 C 中使用的指定初始化语法未在 C 中实现,C 提供了替代技术来增强结构初始化期间的可读性和清晰度。这些技术(例如带有注释和结构化绑定的拆分初始值设定项)提供了向结构成员赋值的有效方法,从而消除了对指定初始值设定项语法的需要。

以上是为什么 C 不支持结构体的指定初始化器?的详细内容。更多信息请关注PHP中文网其他相关文章!

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