我想知道Redis源代码中结构属性的点(。)属性定义的含义:
struct config cfg = {
.tcp = {
.host = "127.0.0.1",
.port = 6379
},
.unix = {
.path = "/tmp/redis.sock"
}
};
使用像.tcp = {...}
?
谢谢大家。
答案 0 :(得分:1)
这是一种对struct
成员进行命名初始化的方法。
初始化struct
的默认方法要求您按成员定义的顺序提供参数。这使您可以重新排序,并使其更具可读性。此语法还允许您仅初始化struct
的几个成员,尤其是。如果他们不是前几个。看看this page。
答案 1 :(得分:0)
...我想知道带有点(。)的属性定义对于struct attributes ...
的含义
它允许您使用初始化语法{ }
访问结构的特定元素。例如,考虑这个结构:
struct my_struct {
int field_1;
int field_2;
int field_3;
};
...可以按如下方式初始化:
struct my_struct s1 = { 1, 2, 3 };
......或如下:
struct my_struct s2 = { .field_1 = 1, .field_2 = 2, .field_3 = 3 };
...或者如果您不知道字段的顺序(或者想要按某种顺序指定它们):
struct my_struct s3 = { .field_3 = 3, .field_1 = 1, .field_2 = 2 };
...评论s1
相当于s2
,相当于s3
。此外,如果您未在初始化中指定字段,则它将为零。来自 C99标准6.7.8.21 :
如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则剩余的聚合应隐式初始化,与具有静态存储持续时间的对象相同。
...来说明这一点:
struct my_struct s4 = { .field_1 = 1 };
...将填充字段2和3,因此s4.field_2 == 0
隐含true
。