0

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

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 
4

2 回答 2

6

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

如果有两个独立的翻译单元,一个单元不能访问static另一个单元的 s,但这不是你的情况。

如果您删除#include "a.c"行并按应有的方式编译:gcc a.c b.c,您将unresolved external收到s.

于 2010-02-22T13:56:53.433 回答
5

它来自一个单独的文件,但您打印的不是来自一个单独的翻译单元,而是#include整个a.cfrom b.c.

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

于 2010-02-22T13:55:50.053 回答