从Storage-class specifiers:为什么使用Storage-Class说明符来确定两个独立的属性?
存储类说明确定他们宣称的名字两个独立的特性:存储时间和联动。
因此,例如,当static
关键字的全局变量和函数使用(谁是存储类是静态反正)它设置了联动,内部联动。当用于函数内部的变量(没有链接)时,它将它们的存储类设置为静态。
我的问题是:为什么两个事物使用相同的说明符?
从Storage-class specifiers:为什么使用Storage-Class说明符来确定两个独立的属性?
存储类说明确定他们宣称的名字两个独立的特性:存储时间和联动。
因此,例如,当static
关键字的全局变量和函数使用(谁是存储类是静态反正)它设置了联动,内部联动。当用于函数内部的变量(没有链接)时,它将它们的存储类设置为静态。
我的问题是:为什么两个事物使用相同的说明符?
其原因大多是历史性的:连接进入C语言的设计中作为事后的想法。在早期的版本中,你可以重新声明全局变量多次如你所愿,和连接器将合并所有这些声明为您提供:
里奇的初衷一直C'S规则上FORTRAN COMMON声明,模型的理论,任何可以处理FORTRAN的机器都会为C做好准备。在公共块模型中,可以多次声明一个公共变量;相同的声明由链接器合并。 (source)
单个声明的当前规则随后与extern
关键字一起出现。那时候有一段C代码足够重要,以使向后兼容性变得重要。这可能是语言设计师为什么不采用新关键字来处理链接的原因,而是重新使用static
。
啊'COMMON'声明 - shuddder。 – chux
可能是因为两个独立的属性很少需要独立使用。最后,它问为什么C这样做。 - 我怀疑是为了简单,它与当时的艺术相匹配。 – chux
@chux,你能详细说一下吗?我不明白为什么“这两个独立的属性很少需要独立使用”。我不明白静态存储和内部链接之间的关系,以及为什么这两者紧密结合。 –
希望下面的答案(s)就足够了。 – chux