當我運行這段代碼:初始化器元件代碼錯誤
void main(){
int a = 5;
static int i = a+5;
printf("%d", i);
}
我得到的錯誤:初始元素不是常數
這是什麼意思?
當我運行這段代碼:初始化器元件代碼錯誤
void main(){
int a = 5;
static int i = a+5;
printf("%d", i);
}
我得到的錯誤:初始元素不是常數
這是什麼意思?
靜態變量進去的數據段。數據段在編譯時被初始化。這意味着編譯時必須知道初始值。在你的情況下,初始值(a的值)來自棧上的一個變量,它僅在運行時纔可用。
YAA @Rumple absoutly權利... – 2011-03-28 10:44:38
謝謝翻車。我現在明白了 – 2011-03-28 10:52:00
由於您初始化變量i
時不是使用常數(如int a = 5;
),而是使用非法的表達式(a+5
)。
關鍵字static
意味着將只有一個變量i
的實例,並且該實例將貫穿程序的整個生命週期。例如,如果要在函數調用之間存儲值,這很有用。
由於變量在應用程序啓動時被初始化,所以該值必須是常量。
在你的情況下,不需要聲明「靜態」,因爲每次調用該函數時都會得到一個新值。
在C初始化器應該是一些常數。但是你可以做這樣的事情......
int a = 5;
static int i;
i = a + 5;
printf("%d", i);
這不會產生任何錯誤......在功能範圍
你說的是intitializer應該是不變的,但是這個代碼是什麼void main() int a = 5; int i = a + 5; printf(「%d」,i); } – 2011-03-28 10:41:21
哪個運行正常 – 2011-03-28 10:42:01
靜態變量應該用常量初始化而不是包含變量的表達式。請糾正我,如果我錯了... – 2011-03-28 12:08:17
注意:'void main'讓寶寶耶穌哭泣。 – cHao 2011-03-28 10:28:28
@cHao void main與此問題無關...... – 2011-03-28 10:30:00
@AMIT:這就是爲什麼我沒有發佈它作爲答案。只是在說'。 – cHao 2011-03-28 10:30:41