gpt4 book ai didi

c - 从c中的另一个文件更新静态全局变量

转载 作者:行者123 更新时间:2023-11-30 16:47:13 27 4
gpt4 key购买 nike

在文件外部更新静态变量,而不修改在 C 语言中声明静态变量的文件。

Proj1 创建 dll。 Proj1 有 abc.h 文件,其定义如下:

static BOOl stvar = False;//declared as global static variable

func1()
{
stvar= TRUE;
}

func2()
{
if(stvar == TRUE)
{
....
}
else
{
func1(); //call to func1 sets STVAR = TRUE;
}
}

Proj2 创建 exe。它有 cprog1.c 文件。 cprog1.c文件定义如下:

cprogfunc1()
{
func2(); //call to func2 sets STVAR = TRUE;
}

cprogfunc2()
{
stvar = FALSE;
func2();
}

我们在 cprogfunc2() 中将 stvar 设置为 false,以使其执行 abc 的 func2() 中的 else block 。 h 文件.但是我们在cprog1.c下的cprogfunc2()中设置的值并没有反射(reflect)在abc.h文件中。我们正在更新其声明之外的静态变量,因为我们无法修改 proj1 下的任何内容。因此,请建议一些从 cprog1.c 文件中更新静态变量而不修改 abc.h/Proj1 的方法。如果这不可能,建议任何解决方法。谢谢。

已经尝试过的解决方案:

  1. 使 stvar 非静态 - 不可能,因为我们无法修改 abc.h 文件
  2. 使用指针 - 不起作用

最佳答案

根据定义,stvar 被设为静态,以限制对其的可访问性,这意味着从外部修改它的理想方法是为其创建一个 API(或者实际上使其成为全局的,而不是静态的)。由于编辑 Proj1 是不可能的,我们的处境很糟糕。

您可以做的是通过释放 dll 并再次加载它来重置 Proj1 的状态,如提及 here.

关于c - 从c中的另一个文件更新静态全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com