13.7 其他语言特性
一些语言特性不能归入其他章节,所以就在这里介绍它们。
13.7.1 Compound Literal
Compound Literals是包含在括号之内的类型名称,之后是一个初始化列表。它创建特定类型的未命名值,它的作用域限于创建它的块;如果它是在所有程序块之外定义的,则是全局作用域。在后一种情况下,初始化表达式必须都是常量表达式。
下面是一个例子:
(struct date){.month=7,.day=2,.year=2004}
这个表达式产生struct date类型的结构,并且有一些初始值。可以将它赋值给另一个struct date,如下所示:
theDate=(struct date){.month=7,.day=2,.year=2004};
或者,它可以传递给带有struct date参数的函数或方法,如下所示:
setStartDate((struct date){.month=7,.day=2,.year=2004});
还可以定义结构之外的其他类型,例如,如果intPtr为int*类型,那么语句
intPtr=(int[100]){[0]=1,[50]=50,[99]=99};
(它可以出现在程序中的任何位置)将intPtr设置为指向包含100个整数的数组,数组的前三个元素初始化为特定的数值。
如果数组的大小没有说明,则由初始列表来确定。