使用C99我试图在一个函数中执行此操作:
foo_t foos[4];
foos[0] = {1, {1,2}};
不起作用。所以我尝试了这个......
foo_t foos[4];
foos[0] = (foo_t){1, {1,2}};
哪个有效,但是安全吗?有没有更好的方法来做到这一点?
答案 0 :(得分:1)
第一种情况失败了,因为没有与表达式相关联的 type (括号括起初始值设定项)
是的,第二个代码是安全的,只要初始化列表与LHS的预期类型匹配即可。这称为compound literal,FWIW。
引用C11
,章节§6.5.2.5
后缀表达式,由带括号的类型名称后跟括号括起来组成 初始化列表是复合文字。它提供了一个未命名的对象,其值由初始化列表给出。