c++ - 哪个范围有静态变量?

标签 c++ static

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

例如,在 config.h 中:

static int setting1 = 10 ;

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

void classA::functionA()
{
    setting1=5;
    classB.functionB();
}

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

void classB::functionB()
{
    int hh=setting1;
    printf("%d",hh);
}

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

虽然setting1是全局静态的,但它的值不能改变?为什么?

最佳答案

如果您在头文件中将 namespace 范围变量声明为 static,然后将该头文件包含在多个源文件中,则每个源文件中都会有该变量的一个实例包括。 static 命名空间范围变量具有内部链接。

您有几个选择:

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

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

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

关于c++ - 哪个范围有静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053412/

相关文章:

python - 静态 CSS 文件未在 Django 框架中加载

c++ - 嵌入式系统中的音频检测

c++ - 在 Netbeans 7.0 中包含 C++ 库

c++ - 为什么 ~(true^true) 不是真的? boolean 运算符(否定)适用于 `unsigned char` s,但不适用于 boolean 值? (C++)

java - 静态 block 和具有静态非原始数据字段的 Field.get(null)

ios - 静态属性观察者

c++ - 是否允许通过指向另一个类的实例的指针发出信号?

c++ - 为什么 const char INITIAL ='G' 不是赋值语句?

java - 接口(interface)变量

javascript - ASP.NET:UpdateProgress 不适用于具有 ClientIDMode ="Static"的控件