当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从C中的另一个文件访问全局静态变量》经验,为你挑选了3个好方法。

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

在档案中

static int val = 10;
globalvar = val;

在文件bc中

extern globalvar;

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

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

谢谢,Sikandar.



1> AnT..:

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

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

int *pval = &val;

并在b.c

extern int *pval;

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

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



2> gameover..:

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

/* 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



3> R Samuel Kla..:

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

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

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

    int read_static(){return val; }

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

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有