全局变量的默认存储类是什么?
我在网上搜索时发现,有些网站说它是static
。但是,静态意味着内部链接,并且变量在文件范围之外不可用,即它不应该对其他目标文件可用。但是,仍然可以使用extern int i
等声明访问其他文件。
而且,如果我明确提到static
为全局变量,则它在文件范围之外不可用。
那么,全局变量的正确默认存储类是什么?
答案 0 :(得分:17)
对于通常所说的“全局”变量,没有“默认存储类”。在命名空间范围内定义变量时,它始终具有静态存储持续时间。没有办法改变这一点,这就是为什么“默认”的想法在这里不适用的原因。 (存储持续时间是正确调用的。)
当您将关键字static
应用于在命名空间作用域中定义的变量时,它不会影响其存储持续时间 - 它已经是静态的并且它仍然是静态的 - 但它会影响它联动。关键字static
将此变量的链接从外部(默认)更改为内部。 链接是一个单独的概念,几乎与存储持续时间无关。
答案 1 :(得分:16)
默认存储持续时间是静态的,但默认链接是外部的。你不是唯一一个发现它有点令人困惑的人。 The C Book(总是很好的参考)说:
“你可能会发现这些互动 在这些各种要素之间 既复杂又令人困惑:那就是 因为他们是!“
带有该引用的部分Declarations, Definitions and Accessibility有一个有用的表格(8.1)。最后一行描述了您感兴趣的情况。正如它所说,没有存储类说明符的数据对象具有外部链接和静态持续时间。