在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

您无法在文件之外访问文件级别的静态变量。

如果您确实需要这样做,那么您有几个选择。

  1. 在具有静态变量的文件中添加一个登录函数。好处是,这限制了从文件外部访问到仅阅读的访问:

    int read_static(){return val; }

  2. 放下静态预选赛并使变量成为全局。

解决方案1:

在文件交流中

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

在文件BC中

extern int *globalvar;

解决方案2:

与其具有另一个变量来传递静态变量的地址,从而增加了很少的内存字节浪费,而是使静态变量本身为外部。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top