我在Linux中碰到這個代碼構造來了,想了解它數組初始化
struct mystruct {
int x;
int b[40];
};
/*later */
static struct mystruct e = { .x = 5,
.b = {-1},
};
是什麼.B = {1}嗎?它是否僅初始化數組b的第一個或所有元素?它是如何工作的 ?
我在Linux中碰到這個代碼構造來了,想了解它數組初始化
struct mystruct {
int x;
int b[40];
};
/*later */
static struct mystruct e = { .x = 5,
.b = {-1},
};
是什麼.B = {1}嗎?它是否僅初始化數組b的第一個或所有元素?它是如何工作的 ?
static struct mystruct e = {
.x = 5,
.b = {-1},
};
在這裏它初始化B [0] -1。其它元件都被初始化爲0。
這意味着通過
.b =
是GCC擴展初始化該結構的部件B與同-1和隨後開始的陣列。 (如C99所述,這也是標準的一部分){-1}
是標準的數組初始化。指定initialisers是在C99引入(但IIRC GCC是實現C99的唯一平臺)因此,將其稱爲* gcc擴展*將是不公平的。 – wildplasser
考慮到代碼的定位(在'struct'初始化的大括號內),我認爲調用標準符號的'='部分並不完全正確。在C99之前,你應該把它寫成'e = {5,{-1}};',沒有等號。 – unwind
@wildplasser - 感謝您的評論,我通常認爲ANSI C ... – MByD
指定初始化:http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html –