2013-03-06 110 views
0

只要結構的存儲類不是'static','C'似乎允許初始化函數內的結構成員,嘗試這樣做會返回以下編譯錯誤:結構初始化中的靜態存儲類中的錯誤

error: initializer element is not constant

代碼剪斷

typedef struct data { 
    int age; 
    char *name; 
} data_t; 

void foo(data_t student) 
{ 
    //data_t s1 = student; <--- works 
    static data_t s1 = student; <--- throws error 
    printf("%s: s1.age: %d, s1.name: %s\n",__FUNCTION__,s1.age, s1.name); 
} 

欣賞,如果你把一些見解。

+1

你想做什麼?爲什麼你想'靜態',你知道這是什麼意思? – 2013-03-06 07:34:51

+0

我知道被聲明爲「靜態」的變量將被存儲在數據段中,因此它們將通過上下文切換保留它們的值,但我沒有意識到「靜態存儲的對象必須用常量表達式或用C中包含常量表達式的聚合初始值設定項進行初始化「,@meyumer在下面指出。我正在試圖確認我在某處閱讀的內容。 – Amit 2013-03-06 09:42:04

回答

2

對象具有靜態存儲有與常量表達式或用含有C.常量表達式骨料初始化您正在嘗試通過非靜態對象student初始化靜態聲明的對象s1進行初始化。這就是編譯器拋出錯誤initializer element is not constant的原因。