C中不寻常的结构定义

时间:2013-07-03 17:55:35

标签: c struct

我正在查看一些具有此类结构定义的代码。起初,我认为这是一种定义结构的特殊方法,该结构定义了它并同时实例化了一个结构。但是,在我自己测试了一些类似的代码后,我对这种代码行为的预测是错误的。有人能告诉我这段代码的作用/在哪里可以看到这种代码的描述吗?

struct Error e = { .code = 22,
                   .msg = 22100 };

3 个答案:

答案 0 :(得分:7)

这不是结构定义,而是指定的初始化程序。它将code字段设置为22,将msg字段设置为22100。从逻辑上讲,你可以改写它:

struct Error e = {0};
e.code = 22;
e.msg = 22100;

你可以用数组做类似的事情:

int a[5] = {
  [3] = 12,
  [4] = 17
};

答案 1 :(得分:4)

这是一个C99 指定初始化程序

指定初始值设定项允许您以任何顺序初始化聚合成员,并且它们还允许您省略成员。未明确指定的成员初始化为0

例如,a初始化:

struct bla {int x; int y; int z;};
struct bla a = {.x =1, .z = 1};

相当于下面的C89初始化:

struct bla a = {1, 0, 1};

关于术语的说明,它是指定初始化程序而不是指定的初始化程序。请参阅缺陷报告DR#253

  

“标准中从未提及”tem“指定初始化程序”,尽管它出现在索引和新功能部分中(标准在文本中使用术语“指定初始化程序”)。

答案 2 :(得分:1)

这称为指定的初始化程序,它正在初始化结构的一个实例。

Here’s GCC’s manual page about how to use them