[英]Function argument anonymous struct
我们许多人都知道这可行:
struct data_s
{
uint32_t p_1;
uint32_t p_2;
uint32_t p_3;
uint32_t p_4;
};
void foo(struct data_s data)
{
printf("p1: %d\r\n", data.p_1);
printf("p2: %d\r\n", data.p_2);
printf("p3: %d\r\n", data.p_3);
printf("p4: %d\r\n", data.p_4);
}
int main(void)
{
foo((struct data_s){
.p_1 = 1,
.p_2 = 2,
.p_3 = 3,
.p_4 = 4});
}
我已经看过很多次了,但是现在在C参考手册中找不到关于它的任何内容。 是否定义了此构造标准或实现?
另外,这种类型转换有点奇怪,因为它更像是“我将告诉编译器如何分配,分配什么以及如何安排它”而不是“将类型转换为这种类型”。 传递给函数的参数在内存中的数据布局是否将与struct data_s obj;
创建的对象完全相同struct data_s obj;
?
这是复合文字 。
我是在C99中引入的,它与其他常量和文字之间没有区别。
通过网络:
复合文字表达式构造一个由type指定的类型的未命名对象,并将其初始化为initializer-list指定的类型。
复合文字的类型为type(类型为未知大小的数组时除外;其大小与数组初始化中一样,从initializer-list推导得出)。
复合文字的值类别为左值(可以使用其地址)。
如果复合文字出现在文件范围内,则复合文字所评估的未命名对象将具有静态存储持续时间;如果复合文字出现在块范围内,则其将具有自动存储持续时间(在这种情况下,对象的生存期在封闭块的末尾结束)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.