标准C89需要初始化语句的元素以固定的顺序出现,和被初始化的数组或结构体中的元素顺序一样。
在ISO C99中,你可以按任何顺序给出这些元素,指明它们对应的数组的下标或结构体的成员名。
gcc采用ANSI C的struct结构体的初始化形式:
1
struct
s
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 .a = 3 ,
10 .b = 4 ,
11 };
12
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 .a = 3 ,
10 .b = 4 ,
11 };
12
数组初始化也类似:
1
int
arr[
3
]
=
{[
2
]
=
3
, [
0
]
=
2
,};
它们为什么采用这种形式进行初始化很好理解,形式上 i.a = 3; arr[2] = 3; 初始化只是把名字省掉,后面部分放到了花括号内。
“[index]
”或“.fieldname
”就是指示符。
老版本:非标准的初始化形式
1
struct
s
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 a : 3 ,
10 b : 4 ,
11 };
12
2 {
3 int a;
4 int b;
5 };
6
7 struct s i =
8 {
9 a : 3 ,
10 b : 4 ,
11 };
12
参考:
http://www.kerneltravel.net/newbie/gcc_man.html#5.22
这篇文章中说有“.fieldname:
” 这样一种初始化形式,貌似不对,fieldname前没有"."
http://blog.hjenglish.com/bedford/articles/1078996.html
http://linuxprograms.wordpress.com/2008/03/07/c-structure-initialization-advanced/