aks*_*aks 0 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
Run Code Online (Sandbox Code Playgroud)
你已将一个文件包含在另一个文件中 - 非常糟糕的做法 但从C编译器点,这两个文件形成一个翻译单元,因为C预处理插入的内容a.c成b.c.
如果有两个单独的翻译单元,一个单元不能访问static另一个单元,但不是你的情况.
如果您删除#include "a.c"行并编译它应该是:gcc a.c b.c,您将收到unresolved external错误s.
这是从一个单独的文件,但你要打印不是来自一个单独的翻译单位,你#include整个的a.c从b.c.
static对象是翻译单元的本地对象,它由所有包含的文件组成,而不是单个源文件.