在C语言中,我想访问文件范围之外的全局静态变量.让我知道最好的方法.其中一种方法是为外部全局变量赋值静态变量的值,
在档案中
static int val = 10; globalvar = val;
在文件bc中
extern globalvar;
但在这种情况下,val(文件ac)中的任何更改都不会在(文件bc)中的globalvar中更新.
请让我知道如何实现同样的目标.
谢谢,Sikandar.
好吧,如果你可以修改文件,a.c
那么只需要val
非静态.
如果你可以修改a.c
但不能使val
非静态(为什么?),那么你可以只声明一个指向它的全局指针a.c
int *pval = &val;
并在b.c
做
extern int *pval;
这将允许您访问的当前值val
通过*pval
.或者你可以引入一个非静态函数来返回当前值val
.
但同样,如果您需要从其他翻译单元访问它,只需将其设置为非静态.
您可以将全局变量指针指向全局静态变量.
/* file a.c */ static int a = 100; /* global static variable not visible outside this file.*/ int *b = &a; /* global int pointer, pointing to global static*/ /* file b.c */ 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 a.c */ return 0; }
在跑步时:
$ gcc *.c && ./a.out 100
您无法访问文件外部的文件级静态变量.
如果你真的需要这样做,你有几个选择.
将访问器函数添加到具有静态变量的文件中.好处是这限制了从文件外部访问只读访问:
int read_static(){return val; }
删除静态限定符并使变量成为全局变量.