从C中的另一个文件访问全局静态变量

Sik*_*dar 6 c global static-variables

在C语言中,我想访问文件范围之外的全局静态变量.让我知道最好的方法.其中一种方法是为外部全局变量赋值静态变量的值,

在档案中

static int val = 10;
globalvar = val;
Run Code Online (Sandbox Code Playgroud)

在文件bc中

extern globalvar;
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,val(文件ac)中的任何更改都不会在(文件bc)中的globalvar中更新.

请让我知道如何实现同样的目标.

谢谢,Sikandar.

AnT*_*AnT 20

好吧,如果你可以修改文件,a.c那么只需要val非静态.

如果你可以修改a.c但不能使val非静态(为什么?),那么你可以只声明一个指向它的全局指针a.c

int *pval = &val;
Run Code Online (Sandbox Code Playgroud)

并在b.c

extern int *pval;
Run Code Online (Sandbox Code Playgroud)

这将允许您访问的当前值val通过*pval.或者你可以引入一个非静态函数来返回当前值val.

但同样,如果您需要从其他翻译单元访问它,只需将其设置为非静态.


gam*_*ver 9

您可以将全局变量指针指向全局静态变量.

/* 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;
}
Run Code Online (Sandbox Code Playgroud)

在跑步时:

$ gcc *.c && ./a.out
100
Run Code Online (Sandbox Code Playgroud)


R S*_*hko 5

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

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

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

    int read_static(){return val; }

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