我用 C++ 编写。我不小心偶然发现了这样的代码,我想知道这里发生了什么以及是否可以在 C++ 中重复此操作。
static struct pci_driver my_driver = {
.name = "my_pci_driver",
.id_table = my_driver_id_table,
.probe = my_driver_probe,
.remove = my_driver_remove
};
还有一件事 - 为什么在 C 中声明结构实例之前需要指定关键字struct
,而不是在 C++ 中?
C和C++是不同的语言,有着不同的规则。
这是 C99 标准中引入 C 的标记初始化器语法。在我看来,那里究竟发生了什么非常明显:您明确指出要使用每个值初始化结构的哪个成员,从而使初始化程序独立于声明结构中的字段的顺序。
C++ 尚不支持标记初始化语法,并且在语言的核心级别没有直接的等价物。如果我没记错的话,在 C++20 的计划中以某种修改/简化的形式支持这种语法。以前,由于 C++ 初始化上下文中涉及的固有复杂性,委员会顽固地拒绝了在 C++ 中支持这种语法的提议。
g++ 编译器完全允许你用 C++ 编写这种方式。但这是一种语言扩展,不是标准的一部分。