有源码如下:
int main() {
int arr[5] = {
[2] = 3,
[4] = 5,
};
return 0;
}
使用GCC编译运行正常。
使用G++编译时报错如下:
array.c: In function 'int main()':
array.c:7:5: sorry, unimplemented: non-trivial designated initializers not supported
7 | };
| ^
array.c:7:5: sorry, unimplemented: non-trivial designated initializers not supported
但若按序初始化,如下所示,则编译运行均正常
int main() {
int arr[5] = {
[0] = 1,
[1] = 2,
[2] = 3,
[3] = 4,
[4] = 5,
};
return 0;
}
按如下代码初始化,GCC编译运行正常,G++则会报错,错误与上相同。
int main() {
int arr[5] = {
[2] = 3,
[4] = 5,
[0] = 1,
[1] = 2,
[3] = 4,
};
return 0;
}
令,如下代码,GCC和G++编译运行均正常
int main() {
int arr[5] = {
[0] = 1,
[1] = 2,
[2] = 3,
[3] = 4,
// [4] = 5,
};
return 0;
}
总结:
C语言在数组初始化话方面更灵活自由,上述几种选择性初始化,全部可以正常使用;
C++比较严格,必须从第一个元素按序初始化,但允许初始化一部分。