初始化结构而不分配?

巴斯蒂安

我在Internet上找不到答案,所以这是我的问题:是否可以在不将其分配给C中的局部变量或全局变量的情况下定义结构实例?例如:

struct A {
  int b;
}

struct A foo() {
  return struct A { .b = 42 };
}

如果这不可能:为什么?

沙菲克·雅格莫(Shafik Yaghmour)

是的C99为此提供了复合文字(实时查看):

return (struct A) {  42 } ;

C99标准草稿部分“6.5.2.5 复合文字”中对此进行了说明,并说:

由括号类型名称和括号括起来的初始化程序列表组成的后缀表达式是复合文字。它提供了一个未命名的对象,其值由初始化程序列表提供。84)

和:

复合文字的值是由初始化程序列表初始化的未命名对象的值。如果复合文字出现在函数主体之外,则对象具有静态存储持续时间;否则,对象将具有静态存储期限。否则,它具有与封闭块关联的自动存储持续时间。

并提供了一些示例,包括:

例3可以将带有名称的初始化程序与复合文字组合起来。使用复合文字创建的结构对象可以传递给函数,而无需依赖于成员顺序:

drawline((struct point){.x=1, .y=1}, (struct point){.x=3, .y=4});

gcc在扩展部分中也有一个不错的文档,因为它在C99和C99之外都支持此功能clang

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章