int some_arr[4];
some_arr = {0, 1, 2, 3};
然后我的编译器(在这种情况下是GCC)会抱怨我在{
之前没有表达式。因此我需要使用复合字面量,很好:
int some_arr[4];
some_arr = (int[]){0, 1, 2, 3};
现在我们发现不允许将值赋给数组。
什么?
我可以通过像memcpy(some_arr, (int[]){0, 1, 2, 3}, sizeof(int[4]))
这样的方式绕过这个问题,或者逐个元素地赋值给some_arr
(或通过循环)。我无法想象GCC无法解析我编写的各个赋值操作(一个不关心用户的懒惰编译器甚至可能在预处理器中完成),所以似乎归根结底是“标准说不行”。那么为什么标准会规定这个特定的事情是禁止的呢?
我不是要找出标准中规定不允许的语言,而是要了解该标准的历史背景。
int some_arr[4] = {0, 1, 2, 3};
一次性初始化整个数组。请注意初始化和分配之间的区别。 - Pierre François