在Linux内核中,很多结构体的初始化都使用了C99支持的指定结构体初始化的特性,如init_task的初始化等。
结构体的指定初始化语法与数组的指定初始化项目相似,只是,结构体的指定初始化使用点运算符和成员名来标识具体元素。
如在C Primer Plus(第五版)中提到的结构体 struct book:
struct book
{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
只初始化book结构的成员value,如下:
struct book surprise = { .value = 20.99 };
也可以按照任意的顺序使用指定初始化,如下:
struct book gift = { .value = 80.66,
.author = "James Broadfool",
.title = "C Primer Plus"};
正像数组一样,跟在一个指定初始化项目之后的常规初始化项目为跟在指定成员后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值。例如,考虑下列声明:
struct book gift = { .value = 18.90,
.author = "Philionna pestle",
10.25};
这将把值10.25赋给成员value,因为它在结构声明中紧跟在author成员之后。新的值10.25代替了早先的赋值18.90。
有关designated initializer的进一步信息可以参考c99标准的6.7.8节Ininialization。
参考资料:
C Primer Plus(第五版) 中的”结构和其他数据形式“中”结构的指定初始化项目“