什么是全局变量的默认存储类?

时间:2010-07-19 14:23:27

标签: c++ global-variables storage default extern

全局变量的默认存储类是什么?

我在网上搜索时发现,有些网站说它是static。但是,静态意味着内部链接,并且变量在文件范围之外不可用,即它不应该对其他目标文件可用。但是,仍然可以使用extern int i等声明访问其他文件。

而且,如果我明确提到static为全局变量,则它在文件范围之外不可用。

那么,全局变量的正确默认存储类是什么?

2 个答案:

答案 0 :(得分:17)

对于通常所说的“全局”变量,没有“默认存储类”。在命名空间范围内定义变量时,它始终具有静态存储持续时间。没有办法改变这一点,这就是为什么“默认”的想法在这里不适用的原因。 (存储持续时间是正确调用的。)

当您将关键字static应用于在命名空间作用域中定义的变量时,它不会影响其存储持续时间 - 它已经是静态的并且它仍然是静态的 - 但它会影响它联动。关键字static将此变量的链接从外部(默认)更改为内部。 链接是一个单独的概念,几乎与存储持续时间无关。

答案 1 :(得分:16)

默认存储持续时间是静态的,但默认链接是外部的。你不是唯一一个发现它有点令人困惑的人。 The C Book(总是很好的参考)说:

  

“你可能会发现这些互动   在这些各种要素之间   既复杂又令人困惑:那就是   因为他们是!“

带有该引用的部分Declarations, Definitions and Accessibility有一个有用的表格(8.1)。最后一行描述了您感兴趣的情况。正如它所说,没有存储类说明符的数据对象具有外部链接和静态持续时间。