1

使用 C99 我正在尝试在函数中执行此操作:

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

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

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

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

4

1 回答 1

1

第一种情况失败,因为没有与表达式关联的类型(大括号括起来的初始化程序)

是的,第二个代码是安全的,只要初始化列表与 LHS 的预期类型匹配。这称为复合文字,FWIW。

引用C11,第 §6.5.2.5 章

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

于 2017-04-04T01:59:11.220 回答