void fun()
{
int i;
int a[]=
{
[0]=3,
[1]=5
};
}
c語言是否支持[]陣列賦值的上述方式。如果是的話,哪個c版本。
我編譯上面的代碼與gcc它工作正常。c語言聲明時通過索引進行數組賦值
但我從來沒有看到過這種轉讓。
void fun()
{
int i;
int a[]=
{
[0]=3,
[1]=5
};
}
c語言是否支持[]陣列賦值的上述方式。如果是的話,哪個c版本。
我編譯上面的代碼與gcc它工作正常。c語言聲明時通過索引進行數組賦值
但我從來沒有看到過這種轉讓。
這是對C89的GCC擴展,C99中的標準的一部分,稱爲'指定初始化程序'。
請參閱http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html。
必須使用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
};
}
使用時無論是ISO C99,C89或者用GNU擴展,可以初始化通過指定要初始化的數組索引來排序數組元素。要做到這一點,請將數組索引放入括號中,並在值前加上賦值運算符。這裏有一個例子:
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 };
我相信這是一個GCC擴展。 – Kninnug