2011-03-25 50 views

回答

5

在C中,您不能使用非常量表達式初始化全局變量。初始化maxlen到我失敗,因爲i不是一個常量表達式。它是C標準的一部分。

爲什麼#define恆定不變?

#define MAXLEN 20 
+0

Thanx mate !!!我現在明白了... – phoenix 2011-03-25 18:35:06

+0

我認爲使用C99標準,你可以使用const關鍵字來代替define。 – BenjaminB 2011-03-25 19:15:41

+0

@Ubiquite是的,但我相信#define更清晰。 – 2011-03-25 19:25:55

5

在初始化該範圍的變量時,只能使用編譯時常量。嘗試:

int i = 20; 
int maxlen; 

int main() 
{ 
    maxlen = i; // assign within the scope of a function 
    int j = i; 
    printf("i=%d , j=%d\n", i , j); 
} 
+0

非常感謝你和你提供給我的信息是非常有用的... – phoenix 2011-03-25 18:34:06

0

此代碼是在Ç無效,但在有效C++

Ç - http://www.ideone.com/mxgMo

錯誤原因- :初始元素不是常數

C++ - http://www.ideone.com/XzoeU

作品

因爲:

C++標準狀態:

3.6.1主要功能[basic.start.main]

1計劃須包含一個稱爲主全局函數,這是該計劃的指定開始。它是實現定義是否需要在獨立環境中的程序來定義主要功能。 [注意:在獨立環境中,啓動和終止是實現定義的; 啓動包含具有靜態存儲持續時間的名稱空間作用域對象的構造函數的執行;終止包含執行靜態存儲持續時間爲的對象的析構函數。末端注]

然而,C99這樣說:

56.7.8初始化

4所有對具有靜態存儲時間 應是不變的對象的初始化表達式表達式或字符串文字。

所以,不只是你的代碼貼出來,但這樣的事情也將是無效的Ç

#include<stdio.h> 

int needint(void); 

int i =needint(); 

int needint(void) 
{ 
    return 1; 
} 

int main() 
{ 
    int j = i; 
    printf("i=%d , j=%d\n", i , j); 
} 

See here