我如何从另一个文件访问静态变量?静态变量不具有文件范围吗?
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
答案 0 :(得分:6)
您已将一个文件包含在另一个文件中 - 非常糟糕的做法。从C编译器的角度来看,两个文件组成一个翻译单元,因为C预处理器将a.c
的内容插入b.c
。
如果有两个单独的翻译单元,则一个单元无法访问另一个单元的static
,但不是您的情况。
如果您移除#include "a.c"
行并进行编译,则应该是:gcc a.c b.c
,unresolved external
会出现s
错误。
答案 1 :(得分:5)
它来自一个单独的文件,但您打印的内容并非来自单独的翻译单元,因为#include
来自a.c
的整个b.c
static
个对象是翻译单元的本地对象,它包含所有包含的文件,而不是单个源文件。