2010-07-19 220 views
15

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

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

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

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

回答

15

默认存储时间是静态的,但默认链接是外部的。你不是唯一觉得有点混淆的人。 The C Book(总是一个很好的参考)说:

“你可能会发现的相互作用这些各要素之间 是 既复杂又混乱:这是 因为他们是”

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

+0

但我们将全局定义为'static int i',并且如果全局变量的默认存储类是静态的,那么它的定义看起来就像'static int i',这意味着内部链接。 – 2010-07-19 14:30:55

+0

正如我所说,默认的连接是外部的。静态的默认值仅适用于持续时间。 – 2010-07-19 14:33:29

+1

要抛出另一个扳手:在C++中,默认情况下,常量对象具有内部链接。 – 2010-07-19 15:01:35

16

通常所说的“全局”变量没有“默认存储类”。当在命名空间范围内定义变量时,它始终有静态存储时间。没有办法改变这种情况,这就是为什么“默认”这个概念在这里不适用的原因。 (和贮存期是它正确调用。)

当您将关键字static在命名空间范围内定义的变量不影响其存储时间 - 这是静态已经和它保持不变 - 但它会影响它联动。关键字static更改此类变量从外部(默认)到内部的链接。 连锁是一个单独的概念,与存储时间几乎无关。

相关问题