我怎么能从另一个文件访问静态变量?
我怎么能从另一个文件访问静态变量? 静态变量不具有文件范围吗?
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
对象是翻译单元的本地对象,它由所有包含的文件组成,而不是单个源文件。