什么是全局变量的默认存储类?什么是全局变量的默认存储类?
虽然在网上搜索我发现,有些网站说它是static
。但是,静态意味着内部链接,并且该变量不能在文件范围之外使用,即它不应该可用于其他目标文件。但是,他们仍然可以使用extern int i
等声明访问其他文件。
而且,如果我明确提到static
全局变量,那么它在文件范围之外是不可用的。
然后,全局变量的默认存储类是什么?
什么是全局变量的默认存储类?什么是全局变量的默认存储类?
虽然在网上搜索我发现,有些网站说它是static
。但是,静态意味着内部链接,并且该变量不能在文件范围之外使用,即它不应该可用于其他目标文件。但是,他们仍然可以使用extern int i
等声明访问其他文件。
而且,如果我明确提到static
全局变量,那么它在文件范围之外是不可用的。
然后,全局变量的默认存储类是什么?
默认存储时间是静态的,但默认链接是外部的。你不是唯一觉得有点混淆的人。 The C Book(总是一个很好的参考)说:
“你可能会发现的相互作用这些各要素之间 是 既复杂又混乱:这是 因为他们是”
该报价部分Declarations, Definitions and Accessibility有一个有用的表格(8.1)。最后一行描述了您感兴趣的案例。正如它所指出的,没有存储类说明符的数据对象具有外部链接和静态持续时间。
通常所说的“全局”变量没有“默认存储类”。当在命名空间范围内定义变量时,它始终有静态存储时间。没有办法改变这种情况,这就是为什么“默认”这个概念在这里不适用的原因。 (和贮存期是它正确调用。)
当您将关键字static
在命名空间范围内定义的变量不影响其存储时间 - 这是静态已经和它保持不变 - 但它会影响它联动。关键字static
更改此类变量从外部(默认)到内部的链接。 连锁是一个单独的概念,与存储时间几乎无关。
但我们将全局定义为'static int i',并且如果全局变量的默认存储类是静态的,那么它的定义看起来就像'static int i',这意味着内部链接。 – 2010-07-19 14:30:55
正如我所说,默认的连接是外部的。静态的默认值仅适用于持续时间。 – 2010-07-19 14:33:29
要抛出另一个扳手:在C++中,默认情况下,常量对象具有内部链接。 – 2010-07-19 15:01:35