繁体   English   中英

函数参数匿名结构

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM