C - 促进匿名结构实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - 促进匿名结构实例相关的知识,希望对你有一定的参考价值。
在this code,一个结构的定义如下:
typedef struct
int line;
int column;
Pos;
后来又用这种方式:
Pos get_pos ( int delta )
...
return ( Pos ) f->line, f->column + delta ;
该生产线,return ( Pos ) f->line, f->column + delta
似乎是创建具有初始化值的结构Pos
的匿名实例。这是什么技术,即,它是如何工作的?我在哪里可以详细了解一下?
这就是所谓的复合文字,并且在C standard的部分6.5.2.5中记载。
本节的摘录如下:
3,它由一个括号的类型名称后面初始化的brace-封闭列表的后缀表达式是字面的化合物。它提供了一个未命名的对象,其值由初始化列表给出。
4如果类型名称指定未知大小的阵列,所述大小由初始化列表如在6.7.9指定确定的,并且该化合物文字的类型是所完成的阵列型的。否则(当类型名称指定的对象类型),化合物文字的类型是由类型名指定。在任一情况下,结果是左值。
5复合文字的值是由初始化列表初始化未命名的对象的。如果化合物字面发生功能的主体外部,该对象具有静态存储持续时间;否则,它具有与所述封闭块相关联的自动存储持续时间。
在你的情况下,复合文字是一个struct
,但他们可以对阵列进行创建。第8段给出了一个例子:
8实施例1的文件的范围定义
int *p = (int [])2, 4;
将初始化
p
指向两个整数的阵列的第一个元素,所述第一具有值2和第二,四。在该化合物中的表达字面需要是恒定的。该不愿透露姓名的对象具有静态存储时间。
也是复合字面常量是一个左值,这意味着你可以把它的地址注意:
Pos *p = &( Pos ) f->line, f->column + delta ;
此对象具有与其相关联的范围寿命,这意味着一旦范围结束对象不再存在。因此,超出范围后不携带其地址。
您也可以使用复合文字与指定的初始化:
return ( Pos ) .line=f->line, .column=f->column + delta ;
以上是关于C - 促进匿名结构实例的主要内容,如果未能解决你的问题,请参考以下文章