2011-12-07 85 views
3

我的項目中只有一個名爲test.c的文件;如果我沒有定義「TRUE」,下面的代碼不能編譯。我用vc。我只是想了解這種行爲。請在這方面提出一些看法。瞭解靜態變量的聲明/初始化C

#ifdef TRUE 
static int a; 
static int a = 1; 
#else 
static int a = 1; 
static int a; 
#endif 

int main (void) 
{ 
    printf("%d\n", a); 
    return 0; 
} 
----------------------- 
#ifdef TRUE  // both ok 
int a; 
int a = 1; 
#else   // both ok 
int a = 1; 
int a; 
#endif 

int main (void) 
{ 
    printf("%d\n", a); 
    return 0; 
} 
+1

嘗試包括錯誤消息。我們不是千里眼。 –

+0

實際上將確切的錯誤信息粘貼到您的問題中通常是您應該做的。 –

+0

'a'重新定義;不同的存儲類別 – caisp

回答

-3

顯然,編譯器不會讓你重新定義已經被初始化的變量..

+0

如果您允許多個相同的定義,則可以進入地獄廚房。 – Thomas

8

那是因爲你已經定義後,你不能聲明一個變量。但是,您可以在聲明它之後定義一個變量。

#ifdef TRUE 
static int a; //Declaring variable a 
static int a = 1; //define variable a 
#else 
static int a = 1; //define variable a 
static int a; //Error! a is already defined so you can not declare it 
#endif 
+2

從技術上講,您可以在聲明它之後對其進行定義。 :P但+1。 –

+0

+1您的評論,我看到變量和思維結構。 – Joe