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

时间:2017-04-14 11:31:02

标签: c static

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

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();
}

我们在stvar中将cprogfunc2()设置为false,以使其在abc。func2()的{​​{1}}中执行else块。但我们在h file下的cprogfunc2()中设置的值未反映在cprog1.c文件中。我们在声明之外更新静态变量,因为我们无法在abc.h下修改任何内容。因此,请建议一些方法来更新proj1文件中的静态变量而不修改cprog1.c。如果不可能,建议任何解决方法。感谢。

已经尝试过解决方案:

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

1 个答案:

答案 0 :(得分:0)

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

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