从C中的另一个文件访问全局静态变量
-
21-09-2019 - |
题
在C语言中,我想访问文件范围之外的全局静态变量。让我知道最好的方法。其中一种方法是分配外部全局变量静态变量的值,
在文件交流中
static int val = 10;
globalvar = val;
在文件BC中
extern globalvar;
但是在这种情况下,Val(文件AC)的任何更改都不会在(文件BC)中的GlobalVar中更新。
请让我知道我该如何实现。
谢谢,西坎达。
解决方案
好吧,如果您可以修改文件 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; }
放下静态预选赛并使变量成为全局。
解决方案1:
在文件交流中
static int val=10;
int *globalvar =&val;
在文件BC中
extern int *globalvar;
解决方案2:
与其具有另一个变量来传递静态变量的地址,从而增加了很少的内存字节浪费,而是使静态变量本身为外部。
建议使用解决方案2,但是如果您仅限于将静态变量更改为外部,请使用解决方案1。
不隶属于 StackOverflow