以下代码在C语言中运行顺利,同时在C ++中工作。为什么? 在编译期间,它显示以下错误
prog.cpp: In function 'int main()':
prog.cpp:5:36: sorry, unimplemented: non-trivial designated initializers not supported
int arr[50] = {0,1,2,[47]=47,48,49};
CODE:
#include <iostream>
using namespace std;
int main()
{
int arr[50] = {0,1,2,[47]=47,48,49};
return 0;
}
答案 0 :(得分:1)
在C ++ 11中给出的代码不合法,它是ISO C99中指定的指定初始化程序。
GCC支持结构字段命名部分规范(例如union D { int i; double d; }; D d { .d = 1.2; }
)作为C ++中的扩展,但不支持数组索引部分。
请参阅https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html:
标准C90要求初始化程序的元素以固定顺序出现,与正在初始化的数组或结构中的元素顺序相同。
在ISO C99中,您可以按任何顺序给出元素,指定它们适用的数组索引或结构字段名称,GNU C也允许它作为C90模式的扩展。此扩展未在GNU C ++中实现。