我怎么能从另一个文件访问静态变量?

时间:2010-02-22 13:53:15

标签: c static-variables

我如何从另一个文件访问静态变量?静态变量不具有文件范围吗?

bash-3.2$ ls
a.c  b.c

bash-3.2$ cat a.c
#include <stdio.h>
static int s = 100;
int fn()
{
/*  some code */
}

bash-3.2$ cat b.c
#include <stdio.h>
#include "a.c"
extern int s;
int main()
{
printf("s = %d \n",s);
return 0;
}

bash-3.2$ gcc b.c   

bash-3.2$ a.exe
s = 100 

2 个答案:

答案 0 :(得分:6)

您已将一个文件包含在另一个文件中 - 非常糟糕的做法。从C编译器的角度来看,两个文件组成一个翻译单元,因为C预处理器将a.c的内容插入b.c

如果有两个单独的翻译单元,则一个单元无法访问另一个单元的static,但不是您的情况。

如果您移除#include "a.c"行并进行编译,则应该是:gcc a.c b.cunresolved external会出现s错误。

答案 1 :(得分:5)

它来自一个单独的文件,但您打印的内容并非来自单独的翻译单元,因为#include来自a.c的整个b.c

static个对象是翻译单元的本地对象,它包含所有包含的文件,而不是单个源文件。