2011-03-28 86 views
2

當我運行這段代碼:初始化器元件代碼錯誤

void main(){ 
    int a = 5; 
    static int i = a+5; 
    printf("%d", i); 
} 

我得到的錯誤:初始元素不是常數

這是什麼意思?

+3

注意:'void main'讓寶寶耶穌哭泣。 – cHao 2011-03-28 10:28:28

+0

@cHao void main與此問題無關...... – 2011-03-28 10:30:00

+3

@AMIT:這就是爲什麼我沒有發佈它作爲答案。只是在說'。 – cHao 2011-03-28 10:30:41

回答

5

靜態變量進去的數據段。數據段在編譯時被初始化。這意味着編譯時必須知道初始值。在你的情況下,初始值(a的值)來自棧上的一個變量,它僅在運行時纔可用。

+0

YAA @Rumple absoutly權利... – 2011-03-28 10:44:38

+0

謝謝翻車。我現在明白了 – 2011-03-28 10:52:00

0

您不能將變量分配給靜態。

+1

不能不可以? – forsvarir 2011-03-28 10:29:27

+0

當然可以。 – ssteinberg 2011-03-28 10:30:29

0

由於您初始化變量i時不是使用常數(如int a = 5;),而是使用非法的表達式(a+5)。

0

關鍵字static意味着將只有一個變量i的實例,並且該實例將貫穿程序的整個生命週期。例如,如果要在函數調用之間存儲值,這很有用。

由於變量在應用程序啓動時被初始化,所以該值必須是常量。

在你的情況下,不需要聲明「靜態」,因爲每次調用該函數時都會得到一個新值。

1

在C初始化器應該是一些常數。但是你可以做這樣的事情......

int a = 5; 
static int i; 
i = a + 5; 
printf("%d", i); 

這不會產生任何錯誤......在功能範圍

+0

你說的是intitializer應該是不變的,但是這個代碼是什麼void main() int a = 5; int i = a + 5; printf(「%d」,i); } – 2011-03-28 10:41:21

+0

哪個運行正常 – 2011-03-28 10:42:01

+0

靜態變量應該用常量初始化而不是包含變量的表達式。請糾正我,如果我錯了... – 2011-03-28 12:08:17