从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 

您无法访问文件外部的文件级静态变量。

如果你真的需要这样做,你有几个选择。

  1. 将访问器函数添加到具有静态变量的文件中。 好处是这限制了从文件外部访问只读访问:

    int read_static(){return val; }

  2. 删除静态限定符并使变量成为全局变量。

解决方案1:

在档案中

 static int val=10; int *globalvar =&val; 

在文件bc中

 extern int *globalvar; 

解决方案2:

而不是让另一个变量传递静态变量的地址,从而增加几个内存字节的浪费,使静态变量本身作为外部。

建议使用解决方案2,但如果您仅限于将静态变量更改为extern,请使用解决方案1。