-2

可能重复:
结构初始化程序中的点 (.) 是什么意思?
[ N ... M ] 在 C 聚合初始值设定项中是什么意思?

struct confd_data_cbs    ssd_shdiag_callback = {
    .callpoint  = show_diag__callpointid_diag_cp,
    .get_object = ssd_common_get_object,
    .get_next   = ssd_common_get_next,
};

.callback、.get_object、.get_next?

4

2 回答 2

6

这些称为指定初始化程序(在 C99 中添加)。它们允许您根据成员名称而不是它们在结构中的位置来指定初始值设定项。如果您想初始化一些成员而不是其他成员(并且您不关心初始化的成员并不都在结构的末尾),这可能会很方便。

于 2012-12-21T05:57:32.103 回答
3

这样做是为了清晰和未来的兼容性。

如果你有结构:

struct confd_data_cbs  {
    TypeA callpoint;
    TypeB get_object;
    TypeC get_next;
};

但在以后的某个时候,像这样改变定义:

struct confd_data_cbs  {
    TypeA callpoint;
    TypeD set_object;   /* New Field Added */
    TypeB get_object;
    TypeC get_next;
};

然后任何指定字段名称的初始化程序将不再工作。
ssd_common_get_object被分配给set_object,并且get_next由于字段的顺序更改,因此将保持未初始化!

当您指定字段名称时,您知道正确的字段正在初始化,即使字段的顺序或数量稍后发生变化。

于 2012-12-21T06:00:50.010 回答