C ++ - 全局范围内变量的静态含义

时间:2015-07-22 16:08:05

标签: c++

在全局范围内定义变量时,将变量定义为静态有什么意义?反正不是全局变量“静态”吗?

即:这段代码有什么区别吗? :

int var1 = 0;
int main()
{
    return var1;
}

static int var1 = 0;
int main()
{
    return var1;
}

我知道静态变量不会从任何其他翻译单元访问,但这并不是我真正关心的。

2 个答案:

答案 0 :(得分:6)

除了您已经提到的翻译单元可见性之外,没有区别。

答案 1 :(得分:4)

  

无论如何,全局变量都不是“静态的”吗?

全局变量确实放在静态内存中。但是,它们在所有翻译单元中都是全局的,因此链接器会看到它们的名称。

  

这段代码有什么区别吗? [...]

如果您决定将第一个代码与另一个具有var1的翻译单元相关联,则会出现链接错误。即使其他翻译单元中的var1是全局的,您的第二个代码也会正确编译。

  

我知道静态变量不会从任何其他翻译单元访问,但这并不是我真正关心的。

内部或外部范围是唯一的区别。有人可能会说这是对关键字static的误用,但这就是它在C标准中的用法。