2017-04-19 35 views
9

Storage-class specifiers为什么使用Storage-Class说明符来确定两个独立的属性?

存储类说明确定他们宣称的名字两个独立的特性:存储时间和联动。

因此,例如,当static关键字的全局变量和函数使用(谁是存储类是静态反正)它设置了联动,内部联动。当用于函数内部的变量(没有链接)时,它将它们的存储类设置为静态。

我的问题是:为什么两个事物使用相同的说明符?

+0

可能是因为两个独立的属性很少需要独立使用。最后,它问为什么C这样做。 - 我怀疑是为了简单,它与当时的艺术相匹配。 – chux

+0

@chux,你能详细说一下吗?我不明白为什么“这两个独立的属性很少需要独立使用”。我不明白静态存储和内部链接之间的关系,以及为什么这两者紧密结合。 –

+0

希望下面的答案(s)就足够了。 – chux

回答

8

其原因大多是历史性的:连接进入C语言的设计中作为事后的想法。在早期的版本中,你可以重新声明全局变量多次如你所愿,和连接器将合并所有这些声明为您提供:

里奇的初衷一直C'S规则上FORTRAN COMMON声明,模型的理论,任何可以处理FORTRAN的机器都会为C做好准备。在公共块模型中,可以多次声明一个公共变量;相同的声明由链接器合并。 (source

单个声明的当前规则随后与extern关键字一起出现。那时候有一段C代码足够重要,以使向后兼容性变得重要。这可能是语言设计师为什么不采用新关键字来处理链接的原因,而是重新使用static

+2

啊'COMMON'声明 - shuddder。 – chux

相关问题