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

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

bash-3.2$ ls ac bc bash-3.2$ cat ac #include  static int s = 100; int fn() { /* some code */ } bash-3.2$ cat bc #include  #include "ac" extern int s; int main() { printf("s = %d \n",s); return 0; } bash-3.2$ gcc bc bash-3.2$ a.exe s = 100 

你已将一个文件包含在另一个文件中 – 非常糟糕的做法 从C编译器的角度来看,两个文件组成一个转换单元,因为C预处理器将ac的内容插入到bc

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

如果你删除#include "ac"行并编译它应该是: gcc ac bc ,你将得到s unresolved external错误。

它来自一个单独的文件,但是你打印的不是来自单独的翻译单元,因为#include来自bc的整个ac

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