哪个范围有静态变量?

Bil*_*Yan 2 c++ static

我正在编写一个设置很少的简单程序.设置是config.h头文件中定义的静态变量.

例如,里面config.h:

static int setting1 = 10 ;
Run Code Online (Sandbox Code Playgroud)

在另一个文件中kkk.cpp,我有一个更改值的函数setting1:

void classA::functionA()
{
    setting1=5;
    classB.functionB();
}
Run Code Online (Sandbox Code Playgroud)

但是,在classB.functionB文件中定义的eee.cpp

void classB::functionB()
{
    int hh=setting1;
    printf("%d",hh);
}
Run Code Online (Sandbox Code Playgroud)

hh仍然是setting1(setting1 == 10)的旧值.

虽然它setting1是一个全局静态,它的价值是不是可以改变?为什么?

Jam*_*lis 6

如果static在头文件中声明了命名空间范围变量,然后将该头文件包含在多个源文件中,则每个源文件中将包含该变量的一个实例.甲static命名空间范围变量具有内部连接.

你有几个选择:

  • 在其中一个.cpp文件中声明变量

  • extern在头文件中声明变量,然后仅在其中一个.cpp文件中定义它

  • 使用静态成员变量并在一个.cpp文件中定义它

  • 通过C-Standard,定义为static的全局变量就像反extern.链接器:extern =别担心; 你会在另一个c(obj)文件中找到它.static =即使其他人也将同样的变量名放在他们的C文件中; 这不是那个. (4认同)