在 C 语言中,我想访问文件范围之外的全局静态变量。让我知道最好的方法。其中一种方法是将静态变量的值分配给外部全局变量,
在文件中
static int val = 10;
globalvar = val;
在文件 bc
extern globalvar;
但在这种情况下,val(文件 ac)中的任何更改都不会在(文件 bc)中的 globalvar 中更新。
请让我知道我怎样才能达到同样的效果。
谢谢,西坎达尔。
在 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
这将让您访问through的当前值*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,但如果您仅限于将静态变量更改为 extern,请使用解决方案 1。