指定的初始化器和省略的元素

时间:2009-04-18 16:52:18

标签: c

任何人都可以解释一下有关指定初始化程序的以下内容:

  

初始化列表可以省略在聚合中任何地方声明的元素,而不是仅在结尾处。

2 个答案:

答案 0 :(得分:9)

如果使用传统的初始化列表,则按顺序分配元素的值,因此如果您有此结构:

typedef struct _foo {
  int a;
  int b;
} foo_t;

然后此初始化工具明确指定a而非b

foo_t value = { 7 };

没有指定的初始化者,唯一可以省略的元素是在末尾声明的元素

使用指定的初始化程序,您可以省略在任何地方声明的元素:

foo_t value = { .b = 8 };

因此省略了value.a的初始化,尽管它是结构中的第一个值。

答案 1 :(得分:2)

试试这个link

这个想法是能够在初始化期间引用类似结构的复杂类型的成员。 E.g。

struct s {
   int a, b;
};

int main() {
  struct s = { .b = 42, .a = -42 };
  return 0;
}

在指定值时,通过独立于顺序获得灵活性。请记住,这已添加到C99标准中,并且可能不受完全不支持C99(或支持早期版本标准)的编译器支持。