Possible Duplicate:
Static vs global
我对全局变量和静态全局变量之间的区别感到困惑.如果static意味着这个变量仅对同一个文件是全局变量,那么为什么在两个不同的文件中,相同的名称会导致名称冲突?
有人能解释一下这个吗?
Possible Duplicate:
Static vs global
我对全局变量和静态全局变量之间的区别感到困惑.如果static意味着这个变量仅对同一个文件是全局变量,那么为什么在两个不同的文件中,相同的名称会导致名称冲突?
有人能解释一下这个吗?
创建链接器可用于其他文件的.o
文件时,会出现全局变量(不是static
).因此,如果您有两个这样的文件,您将在a
上获得名称冲突:
a、 c:
#include <stdio.h>
int a;
int compute(void);
int main()
{
a = 1;
printf("%d %d\n", a, compute());
return 0;
}
卑诗省:
int a;
int compute(void)
{
a = 0;
return a;
}
因为链接器不知道该使用全球a
强中的哪一个.
然而,当您定义静态全局变量时,您告诉编译器仅为该文件保留变量,并且不要让链接器知道它.因此,如果在我编写的两个示例代码中添加static
(在a
的定义中),就不会出现名称冲突,因为链接器甚至不知道这两个文件中都有a
:
a、 c:
#include <stdio.h>
static int a;
int compute(void);
int main()
{
a = 1;
printf("%d %d\n", a, compute());
return 0;
}
卑诗省:
static int a;
int compute(void)
{
a = 0;
return a;
}
这意味着每个文件都使用自己的a
,而不知道其他文件.
顺便说一句,其中一个是static
,另一个只要在不同的文件中就可以了.如果两个声明在同一个文件中(读取translation unit),一个static
和一个extern
,请参阅this answer.