2012-05-09 195 views
0

我在Linux中碰到這個代碼構造來了,想了解它數組初始化

struct mystruct { 
    int x; 
    int b[40]; 
}; 


/*later */ 

static struct mystruct e = { .x = 5, 
          .b = {-1}, 
          }; 

是什麼.B = {1}嗎?它是否僅初始化數組b的第一個或所有元素?它是如何工作的 ?

+0

指定初始化:http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html –

回答

3
static struct mystruct e = { 
    .x = 5, 
    .b = {-1}, 
      }; 

在這裏它初始化B [0] -1。其它元件都被初始化爲0。

1

這意味着通過

  • .b =是GCC擴展初始化該結構的部件B與同-1和隨後開始的陣列。 (如C99所述,這也是標準的一部分)
  • {-1}是標準的數組初始化。
+0

指定initialisers是在C99引入(但IIRC GCC是實現C99的唯一平臺)因此,將其稱爲* gcc擴展*將是不公平的。 – wildplasser

+0

考慮到代碼的定位(在'struct'初始化的大括號內),我認爲調用標準符號的'='部分並不完全正確。在C99之前,你應該把它寫成'e = {5,{-1}};',沒有等號。 – unwind

+0

@wildplasser - 感謝您的評論,我通常認爲ANSI C ... – MByD