当在全局范围中定义变量时,将其定义为静态变量的意义是什么?全局变量不是“静态的”吗?
这个代码有什么区别吗?:
int var1 = 0;
int main()
{
return var1;
}
static int var1 = 0;
int main()
{
return var1;
}
我知道静态变量不能从任何其他翻译单元访问,但这并不是我真正关心的问题。
发布于 2015-07-22 16:11:35
全局变量不是“静态的”吗?
全局变量确实放置在静态内存中。然而,它们在所有的翻译单位都是全球性的,所以链接器可以看到它们的名字。
这段代码有什么区别吗.
如果您决定将第一段代码链接到另一个具有var1
的翻译单元,您将得到一个链接错误。即使其他翻译单元中的var1
是全局的,第二段代码也会正确编译。
我知道静态变量不能从任何其他翻译单元访问,但这并不是我真正关心的问题。
内部或外部范围是唯一的区别。有人可能会说,这是对关键字static
的误用,但在C标准中是这样的。
发布于 2015-07-22 16:09:48
除了您已经提到的翻译单元可见性之外,没有什么不同。
https://stackoverflow.com/questions/31568448
复制相似问题