C struct数组元素初始化转换

时间:2017-04-04 01:49:45

标签: c arrays struct initialization compound-literals

使用C99我试图在一个函数中执行此操作:

foo_t foos[4];
foos[0] = {1, {1,2}};

不起作用。所以我尝试了这个......

foo_t foos[4];
foos[0] = (foo_t){1, {1,2}};

哪个有效,但是安全吗?有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

第一种情况失败了,因为没有与表达式相关联的 type (括号括起初始值设定项)

是的,第二个代码是安全的,只要初始化列表与LHS的预期类型匹配即可。这称为compound literal,FWIW。

引用C11,章节§6.5.2.5

  

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