我正在查看一些具有此类结构定义的代码。起初,我认为这是一种定义结构的特殊方法,该结构定义了它并同时实例化了一个结构。但是,在我自己测试了一些类似的代码后,我对这种代码行为的预测是错误的。有人能告诉我这段代码的作用/在哪里可以看到这种代码的描述吗?
struct Error e = { .code = 22,
.msg = 22100 };
答案 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)
这称为指定的初始化程序,它正在初始化结构的一个实例。