B.5.16 复合常量
复合常量是括在圆括号中的类型名称,之后跟有初始化列表。它创建一个未命名的具有特定类型的值,该值的作用域限于定义它的程序块内,如果在任何程序块之外定义它,则具有全局作用域。在后一种情况下,复合常量的初始值必须全都是常量表达式。
作为一个例子,
(struct point){.x=0,.y=0}
是一个用于产生结构的表达式,该结构的类型为struct point并且具有指定的初始值。这个表达式可以赋值给另一个struct point结构,如下:
origin=(struct point){.x=0,.y=0};
此外,还可将它传递给期望接受struct point参数的函数或方法,如下:
moveToPoint((struct point){.x=0,.y=0});
还可定义非结构的其他类型,如,如果intPtr是int*类型的,则语句
intPtr=(int[100]){[0]=1,[50]=50,[99]=99};
(这条语句可以出现在程序的任何位置)设置intptr使其指向一个包含100个整数的数组,它的3个元素初始化为特定的值。
如果没有指定数组的大小,则是由初始化函数列表确定的。