可能重复:
What does dot (.) mean in a struct initializer?
What does [ N ... M ] mean in C aggregate initializers?
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?
答案 0 :(得分:6)
这些被称为指定的初始化器(在C99中添加)。它们允许您根据成员名称而不是结构中的位置指定初始值设定项。如果你想初始化一些成员而不是其他成员(并且那些你不关心初始化的成员不是全部都在结构的末尾),可以很方便。
答案 1 :(得分: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
将保持未初始化状态,因为字段的顺序已更改!
当您指定字段名称时,即使字段的顺序或数量稍后更改,您也知道正确的字段已初始化。