从C中的另一个文件访问全局静态变量
在C语言中,我想访问文件范围之外的全局静态变量。 让我知道最好的方法。 其中一种方法是为外部全局变量赋值静态变量的值,
在档案中
static int val = 10; globalvar = val;
在文件bc中
extern globalvar;
但在这种情况下,val(文件ac)中的任何更改都不会在(文件bc)中的globalvar中更新。
请让我知道如何实现同样的目标。
谢谢,Sikandar。
好吧,如果你可以修改文件ac
那么只需要使val
非静态。
如果你可以修改ac
但不能使val
非静态(为什么?),那么你可以在ac
声明一个全局指针
int *pval = &val;
在bc
做
extern int *pval;
这将允许您通过*pval
访问val
的当前值。 或者您可以引入一个非静态函数,它将返回val
的当前值。
但同样,如果您需要从其他翻译单元访问它,只需将其设置为非静态。
您可以将全局变量指针指向全局静态变量。
/* file ac */ static int a = 100; /* global static variable not visible outside this file.*/ int *b = &a; /* global int pointer, pointing to global static*/ /* file bc */ extern int *b; /* only declaration, b is defined in other file.*/ int main() { printf("%d\n",*b); /* dereferencing b will give the value of variable a in file ac */ return 0; }
在跑步时:
$ gcc *.c && ./a.out 100
您无法访问文件外部的文件级静态变量。
如果你真的需要这样做,你有几个选择。
-
将访问器函数添加到具有静态变量的文件中。 好处是这限制了从文件外部访问只读访问:
int read_static(){return val; }
-
删除静态限定符并使变量成为全局变量。
解决方案1:
在档案中
static int val=10; int *globalvar =&val;
在文件bc中
extern int *globalvar;
解决方案2:
而不是让另一个变量传递静态变量的地址,从而增加几个内存字节的浪费,使静态变量本身作为外部。
建议使用解决方案2,但如果您仅限于将静态变量更改为extern,请使用解决方案1。