2011-12-07 56 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