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

发布于 2024-08-16 09:53:23 字数 326 浏览 7 评论 0原文

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

在文件ac

static int val = 10;
globalvar = val;

中在文件bc中

extern globalvar;

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

请让我知道我怎样才能实现同样的目标。

谢谢, 西坎达尔。

In C language, I want to access a global static variable outside the scope of the file. Let me know the best possible way to do it.
One of the methods is to assign an extern global variable the value of static variable,

In file a.c

static int val = 10;
globalvar = val;

In file b.c

extern globalvar;

But in this case any changes in val(file a.c) will not be updated in globalvar in (file b.c).

Please let me know how can I achieve the same.

Thanks,
Sikandar.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

往昔成烟 2024-08-23 09:53:23

好吧,如果您可以修改文件 ac,那么只需将 val 设置为非静态即可。

如果您可以修改 ac 但不能使 val 成为非静态(为什么?),那么您可以在 ac 中声明指向它的全局指针code>

int *pval = &val;

和 bc 中的 do

extern int *pval;

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

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

Well, if you can modify file a.c then just make val non-static.

If you can modify a.c but can't make val non-static (why?), then you can just declare a global pointer to it in a.c

int *pval = &val;

and in b.c do

extern int *pval;

which will let you access the current value of val through *pval. Or you can introduce a non-static function that will return the current value of val.

But again, if you need to access it from other translation units, just make it non-static.

流年已逝 2024-08-23 09:53:23

您可以使全局变量指针指向全局静态变量。

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

You can make the global variable pointer to the global static variable.

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

On running:

$ gcc *.c && ./a.out
100
鹿港小镇 2024-08-23 09:53:23

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

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

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

    int read_static() { 返回 val; }

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

You cannot access a file level static variable outside of the file.

If you truly need to do that, you have a couple of choices.

  1. Add an accessor function to the file that has the static variable. The nice thing is this restricts access from outside the file to read-only access:

    int read_static() { return val; }

  2. Drop the static qualifier and make the variable a global.

双马尾 2024-08-23 09:53:23

解决方案 1:

在文件 ac

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

在文件 bc

extern int *globalvar;

解决方案 2:

与其使用另一个变量来传递静态变量的地址,从而增加一些内存字节的浪费,不如使用静态变量本身作为外部。

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

Solution 1:

In file a.c

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

In file b.c

extern int *globalvar;

Solution 2:

Instead of having another variable to pass the address of the static variable thereby adding few memory bytes wastage, make the static variable itself as extern.

Solution 2 is recommended, but in case if you are restricted to changing the static variable to extern, use solution 1.

凑诗 2024-08-23 09:53:23

在C中要从另一个文件访问静态变量,我们可以使用函数或指针来实现,选择取决于程序的具体要求和设计考虑。

使用函数:
在定义静态变量的文件中创建一个函数,该函数返回静态变量的值。这样,变量本身保持静态,但您可以通过函数提供受控访问。

// File1.c
static int myStaticVariable = 10;

int getStaticVariable() {
return myStaticVariable;
}

// File2.c
#include <stdio.h>

extern int getStaticVariable();  // Function prototype

int main() {
int value = getStaticVariable();
printf("Static Variable: %d\n", value);
return 0;
}

To access the static variable from another file in C, we can achieve this by using a function or a pointer, the choice depends on the specific requirements and design considerations of your program.

Use a Function:
Create a function in the file where the static variable is defined, and that function returns the value of the static variable. This way, the variable itself remains static, but you provide controlled access through a function.

// File1.c
static int myStaticVariable = 10;

int getStaticVariable() {
return myStaticVariable;
}

// File2.c
#include <stdio.h>

extern int getStaticVariable();  // Function prototype

int main() {
int value = getStaticVariable();
printf("Static Variable: %d\n", value);
return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文