14

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

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

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

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

4

2 回答 2

17

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

“你可能会发现这些不同元素之间的相互作用既复杂又令人困惑:那是因为它们是!”

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

于 2010-07-19T14:25:18.113 回答
16

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

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

于 2010-07-19T14:37:12.763 回答