2013-05-21 106 views
3

爲什麼當變量聲明爲全局變量時,下面的代碼返回錯誤。函數賦值給變量C

int add(int x, int y) { 
    return x+y; 
} 


int ab = add(10, 20); 
int main(void) { 

    printf("%d", ab); 
} 

但如果我這樣調用:

int add(int x, int y) { 
    return x+y; 
} 


int main(void) { 
    int ab = add(10, 20); // Variable declare inside main 
    printf("%d", ab); 
} 

那麼它的執行沒有錯誤。

+5

文件範圍變量只能用常量表達式進行初始化。函數調用不是一個。 –

回答

7

全局變量的初始值必須是常量,它們不能是任意表達式。

5

在C語言中,您不能在全局範圍內,在函數外部執行代碼,並將函數的返回值存儲在全局變量中。

全局變量必須初始化常數,當你做:

x = func (...) 

的函數的返回是不恆定。

3

從C標準的部分3.5.7 初始化

所有用於具有靜態存儲持續時間中或在初始化列表爲具有聚集或聯合的物體的目標初始值設定的表達式類型應該是常量表達式。

ab具有靜態存儲持續時間,但是add()不是一個常量表達式。

2

全局變量可以通過常量表達式進行初始化。因爲它們的值設置爲編譯時間未處於運行時間

+0

s /常量值/常量表達式/ – Jens

+0

@Jens固定,謝謝。 – Alex