C99标准引入了Designated Initializers特性使得数组、结构体和联合体的初始化更加灵活和方便。

对于一个数组:

int a[10] = { [1] = 1, [8 ... 9] = 10 };

这样可以只初始化a[1], a[8], a[9]三个元素,其他元素的值为0,相当于:

int a[10] = {0, 1, 0, 0, 0, 0, 0, 0, 10, 10};

对于一个结构体:

struct point {
    int x, y;
};

struct point p = { .y = 1, .x = 10 };

这相当于:

struct point p = { 10, 1 };

struct的特性也可以用于union。
这里的[index].fieldname称为designator。

使用这个特性你就可以按照任意顺序初始化数组、结构体和联合体中的成员了。

甚至,这两个designator还可以联合使用,例如:

struct point p_array[10] = { [1].x = 1, [2].y = 1 };

是不是有点动态语言的特性了?

完整特性描述请查看GCC官方文档:Designated Initializers


diabloneo
1.2k 声望180 粉丝

引用和评论

0 条评论