+ -
当前位置:首页 → 问答吧 → 可不可以引用另一个文件里面定义的静态结构体变量

可不可以引用另一个文件里面定义的静态结构体变量

时间:2011-12-06

来源:互联网

a.c 里面定义一个 FIL fl
b.c 里面想使用,可以 extern FIL fl就可以了

现在a.c里面定义static FIL fl
b.c里面怎么使用呢? 直接extern static FIL fl报错~


另外怎么可以把一个结构体定义为volatile类型的,难道只能对结构体里面的成员单个定义吗?

作者: camdw_1   发布时间: 2011-12-06

static 本来就和extern 对立。
static 变量仅仅当前文件可访问,别的文件无法访问。只能通过间接的方法,例如指针。

extern FIL * pfl;

FIL * pfl;
pfl = &fl;

或者函数获取
FIL *GetFIL(){ return &fl;}

作者: vilnies   发布时间: 2011-12-06

static具有文件可见性,即,其它文件是不能链接到此符号的

作者: ouyh12345   发布时间: 2011-12-06

我定义指针还是报错
在a.c里面 定义 static FIL * fl1;
在b.c里面 extern FIL * fl1;
还是编译出错

作者: camdw_1   发布时间: 2011-12-06

在a.c里面 定义 extern FIL * fl1;

static表示该文件只能在本文件使用,你还怎么能在别的文件使用啊

作者: yuzhenhua001   发布时间: 2011-12-06

引用 3 楼 camdw_1 的回复:
我定义指针还是报错
在a.c里面 定义 static FIL * fl1;
在b.c里面 extern FIL * fl1;
还是编译出错

去掉static

作者: walkersfaint   发布时间: 2011-12-06

static作用域是编译单元,static变量和函数除了在当前文件可见之前,对于那些include这个文件的文件也是可见的。所以如果你要用他,include就可以了。

编译器对程序预处理时会把你include的文件的全部内容插入到当前文件中,形成一个编译单元compiler unit, static 对编译单元可见

作者: zshtang   发布时间: 2011-12-06