在全局范围内定义变量时,将变量定义为静态有什么意义?反正不是全局变量“静态”吗?
即:这段代码有什么区别吗? :
int var1 = 0;
int main()
{
return var1;
}
static int var1 = 0;
int main()
{
return var1;
}
我知道静态变量不会从任何其他翻译单元访问,但这并不是我真正关心的。
答案 0 :(得分:6)
除了您已经提到的翻译单元可见性之外,没有区别。
答案 1 :(得分:4)
无论如何,全局变量都不是“静态的”吗?
全局变量确实放在静态内存中。但是,它们在所有翻译单元中都是全局的,因此链接器会看到它们的名称。
这段代码有什么区别吗? [...]
如果您决定将第一个代码与另一个具有var1
的翻译单元相关联,则会出现链接错误。即使其他翻译单元中的var1
是全局的,您的第二个代码也会正确编译。
我知道静态变量不会从任何其他翻译单元访问,但这并不是我真正关心的。
内部或外部范围是唯一的区别。有人可能会说这是对关键字static
的误用,但这就是它在C标准中的用法。