【问题标题】:What's the "dot" definition for struct attributes in C [duplicate]C中结构属性的“点”定义是什么[重复]
【发布时间】:2013-08-15 19:19:19
【问题描述】:

我想知道Redis源代码中结构属性用点(.)定义的属性是什么意思:

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

.tcp = {...}这样用点定义属性有什么特殊含义吗?

谢谢大家。

【问题讨论】:

标签: c struct attributes redis


【解决方案1】:

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

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

【讨论】:

  • 很高兴知道。所以指定的初始化特别适用于你喜欢的任何顺序的部分初始化。谢谢!
  • @TuğcemOral,他的回答不完整。我正在添加一个完整的,他错过了一个重要的点。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2012-07-29
    相关资源
    最近更新 更多