0

我想知道Redis源代码中结构属性的带点 (.) 的属性定义的含义:

    struct config cfg = {
      .tcp = {
        .host = "127.0.0.1",
        .port = 6379
      },
      .unix = {
        .path = "/tmp/redis.sock"
      }
    };

当你用 dot like 定义一个属性时,它有什么特殊含义.tcp = {...}吗?

谢谢大家。

4

2 回答 2

1

这是一种对struct成员进行命名初始化的方法。

初始化 a 的默认方式struct要求您按照定义成员的顺序提供参数。这使您可以重新排序,并使其更具可读性。struct此语法还允许您仅初始化, esp的几个成员。如果他们不是前几个。看看这个页面

于 2013-08-14T00:55:18.283 回答
0

...我想知道带有点(。)的属性定义对于结构属性的含义...

它允许您使用初始化语法访问结构的特定元素{ }。例如,考虑这个结构:

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 };

... 备注 that s1is equivalent to s2which is equivalent to s3。此外,如果您没有在初始化中指定字段,那么它将为零。从C99 标准 6.7.8.21

如果大括号括起来的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小数组的字符串文字中的字符少于数组中的元素,则聚合的其余部分应隐式初始化与具有静态存储持续时间的对象相同。

...为了说明这一点:

struct my_struct s4 = { .field_1 = 1 };

...这将零填充字段 2 和 3,因此s4.field_2 == 0意味着true.

于 2013-08-14T01:26:05.973 回答