C中结构属性的“点”定义是什么

时间:2013-08-14 00:54:09

标签: c struct attributes redis

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

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

使用像.tcp = {...}

这样的点定义属性时,它是否具有特殊含义?

谢谢大家。

2 个答案:

答案 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