void fun ()
{
int i;
int a[]=
{
[0]=3,
[1]=5
};
}
c语言是否支持上述[]数组赋值方式。如果是,那c版本。
我使用gcc编译了上面的代码,它运行正常。
但我之前从未见过这种作业。
答案 0 :(得分:5)
这是C89的GCC扩展,是C99中标准的一部分,称为“指定初始值设定项”。
请参阅http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html。
答案 1 :(得分:5)
必须使用gcc -std=c99
或更高版本进行编译,否则您将获得:
warning: x forbids specifying subobject to initialize
GNU C允许这作为C89中的扩展,在-pedantic
标志开启时跳过此警告,您可以使用__extension__
void fun ()
{
int i;
__extension__ int a[]=
{
[0]=3,
[1]=5
};
}
答案 2 :(得分:2)
当使用带有GNU扩展的ISO C99或C89时,可以通过指定要初始化的数组索引来无序地初始化数组元素。要执行此操作,请在值前包括括号中的数组索引以及可选的赋值运算符。这是一个例子:
int my_array[5] = { [2] 5, [4] 9 };
或者,使用赋值运算符:
int my_array[5] = { [2] = 5, [4] = 9 };
这两个例子都等同于:
int my_array[5] = { 0, 0, 5, 0, 9 };